摘要: 简单树形dp!§题目大意: §一城堡的所有的道路形成一个n个节点的树,如果在一个节点上放上一个士兵,那么和这个节点相连的边就会被看守住,问把所有边看守住最少需要放多少士兵。 dproot[ i ]表示以i为根的子树,在i上放置一个士兵,看守住整个子树需要多少士兵。 §all[ i ]表示看守住整个以i为根的子树需要多少士兵。然后直接树形DP就ok了,不过某人给了个很好的思考题,假如把守边改为守点,该怎样处理呢?我想了一个方法,不知可行不可行:dp[i][1]表示i节点处 放士兵使 以i为根的树都能守住 ,dp[i][1]=1+min(dp[j][1],dp[j][ 阅读全文
posted @ 2011-07-27 20:08 奋斗青春 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 树形DP+一个判断。题目大意:n个人形成一个关系树,每个节点代表一个人,节点的根表示这个人的唯一的直接上司,只有根没有上司。要求选取一部分人出来,使得每2个人之间不能有直接的上下级的关系,求最多能选多少个人出来,并且求出获得最大人数的选人方案是否唯一。前半部分很容易求得,直接一个树形DP,后面的判断最优解是否唯一比较难搞。。看了roba的ppt顿时恍然大悟。§新加一个状态dup[i][j],表示相应的dp[i][j]是否是唯一方案。 §对于叶子结点, dup[k][0] = dup[k][1] = 1. §对于非叶子结点, –对于i的任一儿子j,若(dp[j][0 阅读全文
posted @ 2011-07-27 19:00 奋斗青春 阅读(2049) 评论(0) 推荐(0) 编辑