#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int vis[6003],father[6003],dp[6003][2],num;
void dfs(int par)
{
vis[par]=1;
for(int i=1;i<=num;i++)
if(!vis[i]&&father[i]==par)
{
dfs(i);
dp[par][1]+=dp[i][0];
dp[par][0]+=max(dp[i][0],dp[i][1]);
}
}
int main()
{
while(~scanf("%d",&num))
{
for(int i=1;i<=num;i++)
scanf("%d",&dp[i][1]);
memset(vis,0,sizeof(vis));
memset(father,0,sizeof(father));
int em,bo,root;
while(~scanf("%d %d",&em,&bo),em||bo)
{father[em]=bo;
root=bo;
}
dfs(root);
cout<<max(dp[root][1],dp[root][0])<<endl;
}
return 0;
}
Anniversary party POJ - 2342
最新推荐文章于 2018-08-26 19:05:40 发布