#include<bits/stdc++.h>
using namespace std;
int r[100000],n,v[100000],dp[100000][2],root;
vector<int>g[100000];
void dfs(int x){
dp[x][0]=0,dp[x][1]=r[x];
for(int i=0;i<g[x].size();i++){
int y=g[x][i];
dfs(y);
dp[x][0]+=max(dp[y][0],dp[x][1]),dp[x][1]+=dp[y][0];
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>r[i];
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
g[y].push_back(x),v[x]=1;
}
for(int i=1;i<=n;i++) if(!v[i]){
root=i;
break;
}
dfs(root);
cout<<max(dp[root][1],dp[root][0]);
return 0;
}