标签:
7 1 1 1 1 1 1 1 1 3 2 3 6 4 7 4 4 5 3 5 0 0
5
#include<cstdio>
#define N 6005
struct p
{
int fm;
int child;
int brother;
int att;
int no;
void init()
{
no=0;
fm=0;
brother=0;
child=0;
}
int Max()
{
return att>no? att:no;
}
}num[N];
void dfs(int x)
{
int child=num[x].child;
while(child)
{
dfs(child);
num[x].att+=num[child].no;
num[x].no+=num[child].Max();
child=num[child].brother;
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
{
num[i].init();
scanf("%d",&num[i].att);
}
int a,b;
while(scanf("%d %d",&a,&b),a||b)
{
num[a].fm=b;
num[a].brother=num[b].child;
num[b].child=a;
}
for(int i=1;i<=n;i++)
{
if(num[i].fm==0)
{
dfs(i);
printf("%d\n",num[i].Max());
break;
}
}
}
return 0;
}
HDU 1520 Anniversary party(DFS或树形DP)
标签:
原文地址:http://blog.csdn.net/u012313382/article/details/44465233