#include<bits/stdc++.h>
using namespace std;
const int maxn=6000+1;
vector<int>s[maxn];
int root;
int h[maxn],d[maxn],f[maxn][2],n;
int dfs(int x){
f[x][0]=0;
f[x][1]=h[x];
for(int i=0;i<s[x].size();i++){
int y=s[x][i];
dfs(y);
f[x][0]+=max(f[y][0],f[y][1]);
f[x][1]+=f[y][0];
}
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>h[i];
}
for(int i=1;i<=n-1;i++){
int x,y;
cin>>x>>y;
d[x]=1;
s[y].push_back(x);
}
for(int i=1;i<=n;i++){
if(!d[i]){
root=i;
break;
}
}
dfs(root);
cout<<max(f[root][0],f[root][1]);
return 0;
}