【JZOJ 5426】【NOIP2017提高A组集训10.25】摘Galo
Description
0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO。
这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Galo,美味度为w[i]。
OvO发现,如果她摘下了i号Galo,那么i的子树中的Galo以及i到根的路径上的其他Galo都会死掉。
OvO的袋子只能装k个Galo,她的嘴巴里还能叼1个,请问她所摘Galo的美味度之和的最大值是多少?
Solution
O(nm2)O(nm^2)的暴力大家应该都会,据说这个加点优化即可跑过
这类问题,先把它映射到dfs序上,在这上面做,
这样,转移就十分显然了,要不直接不选,从上一个转过来,要不自己选,从不是自己子树的第一个转移过来,
复杂度:O(nm)O(nm)
Code
#include <cstdio>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fod(i,a,b) for(int i=a;i>=b;i--)
#define efo(i,q) for(int i=A[q];i;i=B[i][0])
#define min(q,w) ((q)>(w)?(w):(q))
#define max(q,w) ((q)<(w)?(w):(q))
#define W(i,j) ((i)*m-m+(j))
using namespace std;
typedef long long LL;
const int N=100500;
int read(int &n)
{
char ch=' ';int q=0,w=1;
for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar());
if(ch=='-')w=-1,ch=getchar();
for(;ch>='0' && ch<='9';ch=getchar())q=q*10+ch-48;n=q*w;return n;
}
int m,n;
int b[N],Si[N];
int d[N];
int B[2*N][2],A[N],B0;
LL f[10200000];
LL ans;
void link(int q,int w){B[++B0][0]=A[q];A[q]=B0,B[B0][1]=w;}
int dfs(int q)
{
d[++d[0]]=q;Si[q]=1;
efo(i,q)Si[q]+=dfs(B[i][1]);
return Si[q];
}
int main()
{
int q,w;
read(n),read(m);m=min(n,m+1);
fo(i,2,n)read(q),read(b[i]),link(q,i);
dfs(1);
fod(i,n,1)
{ int t=W(i,1);
fo(j,1,m)
{ f[t]=max(f[t+m],(j>1?f[W(i+Si[d[i]],j-1)]:0)+(LL)b[d[i]]);
t++;
}
}
ans=0;
fo(i,1,m)ans=max(ans,f[i]);
printf("%lld\n",ans);
return 0;
}
【JZOJ 5426】【NOIP2017提高A组集训10.25】摘Galo相关推荐
- JZOJ 5426. 【NOIP2017提高A组集训10.25】摘Galo
Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Gal ...
- 【NOIP2017提高A组集训10.25】摘Galo (树形dp)
Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Gal ...
- JZOJ5426. 【NOIP2017提高A组集训10.25】摘Galo
Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Gal ...
- JZOJ 5421. 【NOIP2017提高A组集训10.25】嘟嘟噜
Description 由于众所周知的原因, 冈部一直欠真由理一串香蕉. 为了封上真由理的嘴, 冈部承诺只要真由理回答出这个问题, 就给她买一车的香蕉: 一开始有n 个人围成一个圈, 从1 开始顺时针 ...
- JZOJ 5425. 【NOIP2017提高A组集训10.25】数论
Description 聪明的0v0正在学习莫比乌斯反演. 她看到了这样的一道题:有n*m个人站成了一个n*m的方阵-- 剩下的题面,聪明的0v0不记得了.但是,她通过自己高超的数论技巧,给出了一个转 ...
- JZOJ 5422. 【NOIP2017提高A组集训10.25】天才绅士少女助手克里斯蒂娜
Description Input 第一行两个整数n;m 表示电子个数和询问个数. 接下来n 行, 每行两个整数x; y 表示vi. 接下来m 行, 每行形如1 p x y 或2 l r, 分别表示两 ...
- JZOJ 5424. 【NOIP2017提高A组集训10.25】凤凰院凶真
Description Input Output Sample Input 5 1 4 2 5 1 4 1 1 2 4 Sample Output 2 1 4 Data Constraint Solu ...
- 5424. 【NOIP2017提高A组集训10.25】凤凰院凶真
这是一道DP题,然后做的时候发现,DP式子死活推不出来. 题目大意(本人实在是不想复制了呵-- 给出A,B序列 找出他们的最长公共严格递增子序列 明确,这是一道DP 所以设状态fi,jf_{i,j}f ...
- JZOJ5424. 【NOIP2017提高A组集训10.25】凤凰院凶真
题解 题目的意思是求两个序列的最长公共上升子序列. 就此可以联想到求两个序列的最长公共子序列: 设fi,jf_{i,j}表示a序列处理到i,b序列处理j的最长公共子序列, 转移很简单. 现在要满足公共 ...
最新文章
- PostgreSQL 打开文件句柄优化 - 百万以上实体对象初始化优化
- python 虚拟环境就两句话整那么多没用的
- 关注书籍和教程(更新中)
- python3安装过程中出现的ssl问题,No module named _ssl或者renaming “_ssl“ since importing it failed
- Mac系统下如何使用命令行方式启动MySQL
- 使用计算机管理文件教后反思,《管理计算机中的文件》教学反思
- Linux Note
- C/C++混淆点-运算符短路
- leetcode - 91. 解码方法
- BeJavaGod - 如何正确使用数据字典进行分类统一操作(一)
- webmagic模拟登陆获取cookie_Python3爬虫:selenium模拟登录获取cookie提取数据,存入数据库MySQL...
- HTML的Demo实例
- 阿里发力硬件,先做路由器再造电视机
- 未来教育计算机题库三合一,未来教育-全国计算机等级考试真考题库、高频考点、模拟考场三合一(二级MS Office高级应用)...
- linux学习(三)输入输出重定向和管道功能、cat命令、more命令
- 运维工作5年简历写成这样,谁敢要你
- “中年跳槽,伤筋动骨”:35岁跳槽,你可要想清楚
- 什么是GB18030编码?
- [电路笔记]非线性电路
- vmware虚拟机中ubuntu如何连接校园网netkeeper