BZOJ 4557 [JLoi2016]侦察守卫
来源:互联网 发布:商务英语翻译软件 编辑:程序博客网 时间:2024/04/27 15:07
树形DP。
f[i][j]:以i为根的子树中,至少前j层已经被全部覆盖,做完i这一整棵子树的最小代价。
g[i][j]:i节点向上至少 j层被覆盖,做完i的子树的最小代价。
可以根据f直接写出方程,此时唯一需要的就是f[i][0]的初始化,引入g即可解决。
DP方程详见代码,注释已打。
打完这题交上去之后蜜汁rank3,刷常之后成功rank1^_^!你猜下面的代码是rank几的
#include<cstdio>#include<algorithm>#define N 500005#define D 22using namespace std;const int INF = 1<<29;int ecnt=0, n, m, d, w[N], g[N][D], f[N][D], last[N];struct edge{int next,to;}e[N<<1];bool mark[N];int in(){ int r=0; char c=getchar(); while(c<'0'||c>'9')c=getchar(); while(c>='0'&&c<='9')r=r*10+c-'0',c=getchar(); return r;}void add(int a, int b){ e[++ecnt]=(edge){last[a],b}; last[a]=ecnt;}void dp(int x, int fa){ g[x][0]=f[x][0]= mark[x]?w[x]:0 ; for(int i = 1; i <= d; i++)g[x][i]=w[x]; g[x][d+1]=INF; for(int i = last[x]; i; i=e[i].next) { int y=e[i].to; if(y==fa)continue; dp(y,x); //对于向上覆盖,不在y中贡献一个节点而直接统计y,或在y中贡献一个节点 for(int j = 0; j <= d; j++)g[x][j]=min(g[x][j]+f[y][j],f[x][j+1]+g[y][j+1]); //如果能覆盖j+1层,那么一定就能覆盖j层,进行更新 for(int j = d; j >= 0; j--)g[x][j]=min(g[x][j],g[x][j+1]); //关键 f[x][0]=g[x][0]; //f直接统计即可 for(int j = 1; j <= d; j++)f[x][j]+=f[y][j-1]; //覆盖j-1的答案肯定也能符合覆盖j的答案,进行更新 for(int j = 1; j <= d; j++)f[x][j]=min(f[x][j-1],f[x][j]); }}int main(){ n=in();d=in(); for(int i = 1; i <= n; i++) w[i]=in(); m=in(); for(int i = 1, x; i <= m; i++) { x=in(); mark[x]=true; } for(int i = 1, a, b; i < n; i++) { a=in();b=in(); add(a,b); add(b,a); } dp(1,0); printf("%d",f[1][0]);}
1 0
- BZOJ 4557: [JLoi2016]侦察守卫
- BZOJ 4557 [JLoi2016]侦察守卫
- bzoj 4557 [JLoi2016]侦察守卫
- bzoj 4557: [JLoi2016]侦察守卫
- [bzoj-4557][JLoi2016]侦察守卫 题解
- BZOJ 4557: [JLoi2016]侦察守卫 树形dp
- 4557: [JLoi2016]侦察守卫
- 4557: [JLoi2016]侦察守卫
- 4557: [JLoi2016]侦察守卫|树形DP
- 【bzoj4557】[JLoi2016]侦察守卫
- bzoj4557: [JLoi2016]侦察守卫
- 【bzoj4557】【JLoi2016】【树规】侦察守卫
- 【bzoj4557】【JLOI2016】【侦察守卫】【树形dp】
- 侦察守卫
- bzoj4557【JLOI2016】侦查守卫
- 【BZOJ 4557】【JLOI 2016】侦查守卫
- BZOJ 4558 [JLoi2016] 方
- BZOJ 4560 [JLoi2016]字符串覆盖
- Tomcat 8.x 从WebDotXml中的Servlet标签 -> Servlet的包装器StandardWrapper ->管道链末尾实例化Servlet对象
- 键盘的一些状态的改变
- Acdream1103 瑶瑶正式成为CEO(费用流+树剖)
- 关于学习
- yum 安装php56w
- BZOJ 4557 [JLoi2016]侦察守卫
- 前端将json数据解析成js对象失败
- lighttpd 服务器搭建过程记录
- HashSet简单用法
- JAV基础————对集合的简单理解
- Linux驱动开发-混杂字符设备驱动模型笔记 4
- poj3126 Prime Path BFS深度优先搜索
- 不知道为啥 就是想写句话.....
- HIHO #1298 : 数论五·欧拉函数