码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷 P1352 没有上司的舞会

时间:2017-09-12 19:49:12      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:pac   ide   event   i++   www   eve   cli   play   span   

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 }
View Code

 

洛谷 P1352 没有上司的舞会

标签:pac   ide   event   i++   www   eve   cli   play   span   

原文地址:http://www.cnblogs.com/chen74123/p/7511781.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!