8.4晚做题感悟
2017-08-04 22:31
218 查看
第一次写这种博客,可能写得不好,请见谅
最近想做做一些树上的问题,今天找了一个环套树的题骑士(ZJOI2008)
题意
有n(n<=10^6)个人,每个人都有自己的战斗力和他最讨厌的人
要求选出若干人,在任意两人都没有出现讨厌的情况下,战斗力的和最大
可能为一个环套森林
分析
我们可以使用树形dp
如果树上没有环呢?
f[i][0]+=max(f[k][0],f[k][1]);f[i][1]+=f[k][0];
k为i的儿子
我们先考虑单个的环套树(因为最后的环套森林的最优解即为各个环套树最优解的和)
先用dfs求出环的部分,只需要求出环上的两点即可
然后断边,用树形dp求解
代码
代码到底放不放我也不清楚,看看评论再说吧
最近想做做一些树上的问题,今天找了一个环套树的题骑士(ZJOI2008)
题意
有n(n<=10^6)个人,每个人都有自己的战斗力和他最讨厌的人
要求选出若干人,在任意两人都没有出现讨厌的情况下,战斗力的和最大
可能为一个环套森林
分析
我们可以使用树形dp
如果树上没有环呢?
f[i][0]+=max(f[k][0],f[k][1]);f[i][1]+=f[k][0];
k为i的儿子
我们先考虑单个的环套树(因为最后的环套森林的最优解即为各个环套树最优解的和)
先用dfs求出环的部分,只需要求出环上的两点即可
然后断边,用树形dp求解
代码
代码到底放不放我也不清楚,看看评论再说吧