Cell Phone Network (树形dp,最小点覆盖)
标签:题目 pre queue net 最小 转移 efi scan long
https://ac.nowcoder.com/acm/problem/24953
题目描述:给出一棵树,选最小的点把所以边覆盖。
思路:
• dp[i][0]:选点i,并且以点i为根的子树都被覆盖了。
• dp[i][1]:不选点i,i被其儿子覆盖
• dp[i][2]:不选点i,i没有被子节点覆盖(被其父亲覆盖)
转移:
• dp[i][0]=1+Σmin(dp[v][0],dp[v][1],dp[v][2]) (v是i的儿子)
• dp[i][2]=Σ(dp[u][1]) //所有不覆盖他的儿子和
• dp[i][1]至少需要一个儿子被选,(不然覆盖不了i),即至少选一个dp[v][0]。
如果没有选到dp[v][0],我们就把其中一个dp[v][1]花最小的代价变成dp[v][0]。
cost=min(dp[v][0]-dp[v][1]) (v是i儿子)
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
Cell Phone Network (树形dp,最小点覆盖)
标签:题目 pre queue net 最小 转移 efi scan long
原文地址:https://www.cnblogs.com/studyshare777/p/13472868.html
评论