Input Employees are numbered from 1 to N. A first line of input contains a number N. 1 <= N <= 6 000. Each of the subsequent N lines contains the conviviality rating of the corresponding employee. Conviviality rating is an integer number in a range from -128 to 127. After that go T lines that describe a supervisor relation tree. Each line of the tree specification has the form:
L K
It means that the K-th employee is an immediate supervisor of the L-th employee. Input is ended with the line
0 0
Output Output should contain the maximal sum of guests' ratings.
Sample Input
7 1 1 1 1 1 1 1 1 3 2 3 6 4 7 4 4 5 3 5 0 0
Sample Output
5
Source Ural State University Internal Contest October'2000 Students Session 解题:dp[p][0]表示不选节点p,dp[p][1]选了节点p; 方程:dp[p][1]=max(dp[p][1],dp[p][1]+dp[son][0]); ans=max(dp[p][0],dp[p][0]+dp[son][0]); dp[p][0]=max(ans,dp[p][0]+dp[son][1]);
#include#include #include using namespace std; vector node[6005]; int dp[6005][2],vist[6005],val[6005]; int max(int a,int b) { return a>b a:b; } void dfs(int p) { int ans; dp[p][0]=0; dp[p][1]=val[p]; vist[p]=1; for(int i=0;i 0) { for(int i=1;i<=N;i++) { scanf("%d",&val[i]); vist[i]=0; node[i].clear(); } while(scanf("%d%d",&a,&b)>0&&a+b!=0) { node[a].push_back(b); node[b].push_back(a); } dfs(1); printf("%d\n",max(dp[1][0],dp[1][1])); } }