第二个MLE,其他AC
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int n,r[N],l,k,f[N],b[N],a[N][N],s[N][2],t;
void dfs(int u){
s[u][1]=r[u];
for(int i=0;i<b[u];++i){
int son=a[u][i];
dfs(son);
s[u][1]+=s[son][0];
s[u][0]+=max(s[son][0],s[son][1]);
}
}int main(){
cin>>n;
for(int i=1;i<=n;++i)cin>>r[i];
for(int i=1;i<n;++i){
cin>>l>>k;
f[l]=k;
a[k][b[k]++]=l;
}for(int i=1;i<=n;++i)
if(!f[i]){
t=i;
dfs(i);
break;
}
cout<<max(s[t][0],s[t][1]);
return 0;
}