明明想到了正解然后写跪一分没有 T_T
惨痛教训啊
题意
给出一个无根树,树有N个点,边有权值,每个点都有颜色,是黑色,白色,
灰色这三种颜色之一.
删去若干条边使得树中不含有黑色结点或者含有至多一个白色节点.
计算最小删去边的边权和.
分析
作为一棵树就要有被树形dp的觉悟 = =
我们设置状态f[i][0],f[i][1],f[i][2]分别表示使以i为根的原树的子树中删去一些边后合法时,以i为根的当前子树中
1>不含黑色节点
2>含有1或0个白色节点
3>不含有白色节点
再进行状态转移即可
这么好想的dp还实现不好真是醉了>_<
在具体实现时将节点的信息以dfs序存了起来,最后在外边for循环了一遍.
这么2333的方法请吐槽我SB
代码
1 | #include <cstdio> |