摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1054 题目大意:一城堡的所有的道路形成一个n个节点的树,如果在一个节点上放上一个士兵,那么和这个节点相连的边就会被看守住,问把所有边看守住最少需要放多少士兵。题解:树形dpdp[r][0] 表示 以 r 为根的 子树 在 r 上 不放 士兵 的 最小值dp[r][1] 是放士兵的最小值 (他的 字节的 既可以放 ,也可以 不放)dp[r][0] = ∑ dp[j][1] j 为 r 的 子节点dp[r][1] = ∑ min( dp[j][1],dp[j][0] ) + 1;1#include<std 阅读全文
posted @ 2012-08-13 15:09 Szz 阅读(410) 评论(0) 推荐(0)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2412 题目大意:n个人形成一个关系树,每个节点代表一个人,节点的根表示这个人的唯一的直接上司,只有根没有上司。要求选取一部分人出来,使得每2个人之间不能有直接的上下级的关系,求最多能选多少个人出来,并且求出获得最大人数的选人方案是否唯一。树形dp+判断 状态转移方程: 对于叶子节点 dp[k][0] = 0, dp[k][1] = 1 对于非叶子节点i, dp[i][0] = ∑max(dp[j][0], dp[j][1]) (j是i的儿子) dp[i][1] = 1 + ∑dp[j][0] (j是i的.. 阅读全文
posted @ 2012-08-13 11:29 Szz 阅读(239) 评论(0) 推荐(0)