#include<bits/stdc++.h>
using namespace std;
int n;
const int N=6e3+10;
int f_1[N],f_0[N];
vector<int> e[N];
void Pack(int u,int v){
f_1[u]+=f_0[v];
f_0[u]+=max(f_1[v],f_0[v]);
}
void Dfs(int u){
for(auto v:e[u]){
Dfs(v);
}
for(auto v:e[u]){
Pack(u,v);
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>f_1[i];
}
int degree[n+1];
for(int i=1;i<n;i++){
int u,v;
cin>>v>>u;
e[u].push_back(v);
degree[v]++;
}
int head;
for(int i=1;i<=n;i++){
if(!degree[i]){
head=i;
break;
}
}
Dfs(head);
cout<<max(f_1[head],f_0[head]);
return 0;
}
只过了3、7