1 /* 2 题意:上司在,员工不在,反之不一定。每一个人有一个权值,问权值和最大多少。 3 树形DP:把上司和员工的关系看成根节点和子节点的关系,两者有状态转移方程: 4 dp[rt][0] += max (dp[son][1], dp[son][0]); //上司不去 5 dp[rt][1] += dp[son][0]; //上司去,员工都不去 6 */ 7 #include8 #include 9 #include 10 #include 11 #include 12 using namespace std;13 14 const int MAXN = 6e3 + 10;15 const int INF = 0x3f3f3f3f;16 bool vis[MAXN];17 vector edge[MAXN];18 int dp[MAXN][2];19 int n;20 21 void DFS(int rt)22 {23 vis[rt] = true;24 dp[rt][0] = 0;25 for (int i=0; i