#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1000;
int a[N],n,fa[N],vis[N],root;
long long f[N];
vector<int>g[N];
void dp(int x){
f[x]=a[x];
for(int i=0;i<g[x].size();i++){
int y=g[x][i];
if(vis[y])continue;
vis[y]=1;
dp(y);
f[x]=max(f[x],f[x]+f[y]);
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<n;i++){
int u,v;
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
fa[v]=u;
}
for(int i=1;i<=n;i++){
if(!fa[i]){
root=i;
break;
}
}
dp(root);
long long ans=-999999;
for(int i=1;i<=n;i++)
ans=max(ans,f[i]);
cout<<ans;
return 0;
}