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

poj 2342 && hdu 1520 树形dp

时间:2015-05-10 23:54:55      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

题意:有n个人,接下来n行是n个人的价值,再接下来n行给出l,k说的是l的上司是k,这里注意l与k是不能同时出现的

链接:点我

dp[i][1] += dp[j][0],

dp[i][0] += max{dp[j][0],dp[j][1]};其中j为i的孩子节点。

第二次做感觉已经很水了

 技术分享

 

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 #define MOD 1000000007
10 const int INF=0x3f3f3f3f;
11 const double eps=1e-5;
12 typedef long long ll;
13 #define cl(a) memset(a,0,sizeof(a))
14 #define ts printf("*****\n");
15 const int MAXN=6010;
16 int n,m,tt;
17 int aa[MAXN];
18 int tot,head[MAXN],dp[MAXN][2],in[MAXN];
19 struct Edge
20 {
21     int to,next;
22 }edge[MAXN];
23 void addedge(int u,int v)
24 {
25     edge[tot].to=v;
26     edge[tot].next=head[u];
27     head[u]=tot++;
28 }
29 int dfs(int u)
30 {
31     for(int i=head[u];i!=-1;i=edge[i].next)
32     {
33         int v=edge[i].to;
34         dfs(v);
35         dp[u][1]+=dp[v][0];
36         dp[u][0]+=max(dp[v][0],dp[v][1]);
37     }
38     return max(dp[u][0],dp[u][1]);
39 }
40 void init()
41 {
42     tot=0;
43     memset(head,-1,sizeof(head));
44     cl(dp);
45     cl(in);
46 }
47 int main()
48 {
49     int i,j,k;
50     #ifndef ONLINE_JUDGE
51     freopen("1.in","r",stdin);
52     #endif
53     while(scanf("%d",&n)!=EOF)
54     {
55         init();
56         for(i=1;i<=n;i++)
57            scanf("%d",&dp[i][1]);
58         int a,b;
59         while(scanf("%d%d",&a,&b))
60         {
61             if(a==0&&b==0)break;
62             addedge(b,a);
63             in[a]++;
64         }
65         int ans=0;
66         for(i=1;i<=n;i++)        //题目的意思就一棵树
67         {
68             if(!in[i])  ans=dfs(i);
69         }
70         printf("%d\n",ans);
71     }
72 }

 

poj 2342 && hdu 1520 树形dp

标签:

原文地址:http://www.cnblogs.com/cnblogs321114287/p/4277115.html

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