http://acm.hdu.edu.cn/showproblem.php?pid=1520
#include<iostream>
using namespace std;
#define N 6001
struct node{
int father;
int child;
int brother;
int attend;
int Not;
int Max(){
if(attend>Not)
return attend;
return Not;
}
void init(){
father=0;
child=0;
brother=0;
Not=0;
}
}p[N];
void dfs(int x){
int child;
child=p[x].child;
while(child){
dfs(child);
p[x].attend+=p[child].Not;
p[x].Not+=p[child].Max();
child=p[child].brother;
}
}
int main(void){
int n;
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++){
p[i].init();
scanf("%d",&p[i].attend);
}
int a,b;
while(scanf("%d%d",&a,&b),a||b){
p[a].father=b;
p[a].brother=p[b].child;
p[b].child=a;
}
for(int i=1;i<=n;i++)
if(p[i].father==0){
dfs(i);
printf("%d\n",p[i].Max());
break;
}
}
}
孩子兄弟结构