洛谷 P1352 没有上司的舞会
Posted Alex丶Baker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P1352 没有上司的舞会相关的知识,希望对你有一定的参考价值。
P1352 没有上司的舞会
树形dp
dp[i][0]表示第i个人没有来的活跃值
dp[i][1]表示第i个人来了的活跃值
第i个人来时,他的直接下属就不可以来 所以 如果k是他的直接下属的话 dp[i][1]+=dp[k][0]
第i个人不来,他的直接下属可以来也可以不来 所以 如果k是他的直接下属的话 dp[i][0]+=max(dp[k][0],dp[k][1])
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define maxn 1000000 4 int n,m,fa[maxn],root,dp[maxn][2],x,y; 5 bool vis[maxn]; 6 7 void tree_dp(int x) 8 { 9 vis[x]=1; 10 for(int i=1;i<=n;i++) 11 { 12 if(!vis[i]&&fa[i]==x) 13 { 14 tree_dp(i); 15 dp[x][1]+=dp[i][0]; 16 dp[x][0]+=max(dp[i][1],dp[i][0]); 17 } 18 19 } 20 } 21 22 int main() 23 { 24 scanf("%d",&n); 25 for(int i=1;i<=n;i++) scanf("%d",&dp[i][1]); 26 for(int i=1;i<n;i++) 27 { 28 scanf("%d%d",&x,&y); 29 fa[x]=y; root=x; 30 } 31 scanf("%d%d",&x,&y); 32 while(fa[root]) root=fa[root]; 33 tree_dp(root); 34 printf("%d\n",max(dp[root][0],dp[root][1])); 35 return 0; 36 }
以上是关于洛谷 P1352 没有上司的舞会的主要内容,如果未能解决你的问题,请参考以下文章