WRONG CODE
#include<bits/stdc++.h>
using namespace std;
const int maxn=6010;
int h[maxn],vis[maxn],f[maxn][2],root,n;
vector<int> son[maxn];
void dfs(int x){
f[x][0]=0;
f[x][1]=h[x];
//cout<<"111qdqhueHIF"<<endl;
/*
if(son[x].size()==0){
return;
}*/
//cout<<son[x].size()<<" "<<son[x].size()-1<<endl;
for(int i=0;i<=son[x].size()-1;i++){
int y=son[x][i];
//cout<<"222qdqhueHIF"<<endl;
dfs(y);
//cout<<"333qdqhueHIF"<<endl;
f[x][0]+=max(f[y][0],f[y][1]);
f[x][1]+=f[y][0];
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>h[i];
}
for(int i=1;i<=n-1;i++){
int l,k;
cin>>l>>k;
son[k].push_back(l);
vis[l]=1;
}
for(int i=1;i<=n;i++){
if(!vis[i]){
root=i;
break;
}
}
dfs(root);
//cout<<"444qdqhueHIF"<<endl;
cout<<max(f[root][0],f[root][1]);
return 0;
}
一定要小心这个坑啊!!!!!