题目链接:
dp[i][0/1]表示以i为根的子树,选或不选根,所能得到的最大rating和。
显然
dp[i][0]=∑max(dp[son][0],dp[son][1])
dp[i][1]=val[i]+∑dp[son][0]
#include#include #include using namespace std;const int maxn=6005;int v[maxn];int p[maxn];vector G[maxn];int dp[maxn][2];void dfs(int u){ dp[u][0]=0; dp[u][1]=v[u]; for (int i=0;i