Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 5158 | Accepted: 2925 |
Description
Input
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
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int vis[6005];
int dp[6005][2];
int father[6005];
int n;
int max(int a,int b) {
return (a>b)?a:b;
}
void treedp(int node) {
int i;
vis[node]=1;
for(i=1; i<=n; i++) {
if(!vis[i]&&father[i]==node) {
treedp(i);
dp[node][1]+=dp[i][0];
dp[node][0]+=max(dp[i][0],dp[i][1]);
}
}
}
int main() {
int l,k,i;
scanf("%d",&n);
int root=0;
for(i=1; i<=n; i++) {
scanf("%d",&dp[i][1]);
}
while(scanf("%d%d",&l,&k),l||k) {
father[l]=k;
}
root=k;
while(father[root]) {
root=father[root];
}
treedp(root);
printf("%d\n",max(dp[root][0],dp[root][1]));
return 0;
}