jzoj 4814. 【NOIP2016提高A组五校联考2】tree 树形dp
来源:互联网 发布:日本 常任理事国知乎 编辑:程序博客网 时间:2024/05/18 20:36
分析:这题跟那道很经典的树形dp题选课基本上是一毛一样,然后在比赛的时候就把选课的方法打了上去,也就是把这棵树转换成二叉树后O(n^3)dp,本来是想着水个60分滚粗的,但没想到居然A掉了,rp狂掉啊……
这道题的正解是个脑洞蛮大的树形dp,在《背包九讲》里面貌似叫什么泛化物品之类的,反正是蛮神的东西。
先用深搜遍历这棵树,然后用f[i,j]表示搜索到点i的时候,在已经被搜索过的点里面至少选了j个点的最大收益(不包括节点i自己),那么每次从节点i转移的时候我们先把f[i,j]的值全部赋给i的儿子节点,然后转移完儿子节点之后再转移回节点i,由于题目要求,所以转移回节点i的时候要强制选上i的儿子节点。
代码:
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#define N 3005#define inf 0x3f3f3f3fusing namespace std;int last[N],val[N],f[N][N],cnt,n,m;struct edge{int to,next;}e[N*2];void addedge(int u,int v){e[++cnt].to=v;e[cnt].next=last[u];last[u]=cnt;e[++cnt].to=u;e[cnt].next=last[v];last[v]=cnt;}void dfs(int x,int fa){for (int i=last[x];i;i=e[i].next){if (e[i].to==fa) continue;for (int j=0;j<=m;j++) f[e[i].to][j]=f[x][j];dfs(e[i].to,x);for (int j=1;j<=m;j++) f[x][j]=max(f[x][j],f[e[i].to][j-1]+val[e[i].to]);}}int main(){freopen("tree.in","r",stdin);freopen("tree.out","w",stdout);scanf("%d%d",&n,&m);for (int i=1;i<=n;i++)scanf("%d",&val[i]);for (int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);addedge(u,v);}dfs(1,0);printf("%d",f[1][m-1]+val[1]);return 0;}
0 0
- jzoj 4814. 【NOIP2016提高A组五校联考2】tree 树形dp
- JZOJ 4814. 【NOIP2016提高A组五校联考2】tree
- 【jzoj 4814】【NOIP2016提高A组五校联考2】tree
- JZOJ 4814 【NOIP2016提高A组五校联考2】tree
- 【NOIP2016提高A组五校联考2】tree
- 【NOIP2016提高A组五校联考2】tree
- 【NOIP2016提高A组五校联考2】tree
- tree 【NOIP2016提高A组五校联考2】
- JZOJ 4812 【NOIP2016提高A组五校联考2】string
- [jzoj 4812]【NOIP2016提高A组五校联考2】string
- JZOJ 4813 【NOIP2016提高A组五校联考2】running
- 【JZOJ 4814】【NOIP2016提高组 五校联考2】tree
- 【JZOJ4814】【NOIP2016提高A组五校联考2】tree
- JZOJ4814. 【NOIP2016提高A组五校联考2】tree
- jzoj 4811. 【NOIP2016提高A组五校联考1】排队
- JZOJ 4809 【NOIP2016提高A组五校联考1】挖金矿
- JZOJ 4810 【NOIP2016提高A组五校联考1】道路规划
- JZOJ 4811 【NOIP2016提高A组五校联考1】排队
- Android即时通讯和sns开源项目汇总
- 二叉树练习题
- 剑指Offer面试题24(Java版):二叉搜索树后序遍历序列
- android事件监听回调机制
- Java POI组件——读、筛选、写Excel
- jzoj 4814. 【NOIP2016提高A组五校联考2】tree 树形dp
- angular.js学习(3)--injector注射器
- Java并发基础(三)-线程安全
- 【jzoj 4814】【NOIP2016提高A组五校联考2】tree
- 操作系统精髓与设计原理--进程控制
- PADS差分信号如何画
- CSDN markdown 编辑器模板
- 2016弱校联盟十一专场10.2 Longest Increasing Subsequence
- MDCC2016 总结