poj 2343

时间:2014-03-05 16:41:30   收藏:0   阅读:592

 

 

bubuko.com,布布扣
 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<vector>
 5 #include<algorithm>
 6 using namespace std;
 7 
 8 vector < int > g[6002];
 9 int w[6002],d[6002][2];
10 
11 __int64 dfs(int i,int j,int f)
12 {
13     if(d[i][j]!=-1)      //  注意要记录  不然会超时
14     {
15         return d[i][j];
16     }
17     __int64 ans=0;     //点i  不在 一定合法
18 
19     for(int k=0; k<g[i].size(); k++)
20     {
21         int v=g[i][k];
22         if(v!=f)
23             ans+=dfs(v,0,i);
24     }
25     if(j==0) //只有i 的父亲 不在i才能在
26     {
27         __int64 sum=w[i];
28         for(int k=0; k<g[i].size(); k++)
29         {
30             int v=g[i][k];
31             if(v!=f)
32                 sum+=dfs(v,1,i);
33         }
34         ans=max(ans,sum);
35     }
36     return d[i][j]=ans;
37 }
38 
39 int main()
40 {
41     int i,j,n,m,t,a,b;
42     while(scanf("%d%d",&n,&w[1])!=EOF)
43     {
44         for(i=0; i<=n; i++)
45             g[i].clear();
46         for(i=2; i<=n; i++)
47             scanf("%d",&w[i]);
48         for(i=1; ; i++)
49         {
50             scanf("%d%d",&a,&b);
51             if(a==0&&b==0)
52                 break;
53             g[a].push_back(b);
54             g[b].push_back(a);
55         }
56         memset(d,-1,sizeof(d));
57         printf("%I64d\n",dfs(1,0,-1));
58     }
59     return 0;
60 }
bubuko.com,布布扣

poj 2343,布布扣,bubuko.com

原文:http://www.cnblogs.com/assult/p/3581187.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!