本地运行正常......
#include<bits/stdc++.h>
using namespace std;
#define I(e) for(int i=1;i<=e;i++)
struct T{
int fa;
int sons;
int sum;
int son[6666];
}a[6666];
int dp[6666][2];
int n;
int root;
void dfs(int place){
if(a[place].sons==0){
dp[place][1]=a[place].sum;
return ;
}
I(a[place].sons){
dfs(a[place].son[i]);
}
int no=0;
int mx=0;
I(a[place].sons){
int nop=dp[a[place].son[i]][0];
int yep=dp[a[place].son[i]][1];
no+=nop;
mx+=max(nop,yep);
}
dp[place][0]=mx;
dp[place][1]=no+a[place].sum;
return ;
}
int main(){
cin>>n;
root=n*(n+1)/2;
I(n){
scanf("%d",&a[i].sum);
}
I(n-1){
int k,l;
scanf("%d%d",&l,&k);
a[l].fa=k;
a[k].sons++;
a[k].son[a[k].sons]=l;
root-=l;
}
dfs(root);
/*I(n){
cout<<dp[i][0]<<" "<<dp[i][1]<<'\n';
}*/
cout<<max(dp[root][1],dp[root][0]);
return 0;
}