#include <bits/stdc++.h>
using namespace std;
int n,a[6005],f[6005][2],ans[6005];
vector <int> v[6006];
int root;
bool vis[6005];
int dfs(int x,int o)
{
if(f[x][o]!=-1044266559)
return f[x][o];
int s;
if(o==0)
{
s=0;
for(int i=0;i<v[x].size();i++)
s+=max(dfs(v[x][i],0),dfs(v[x][i],1));
}
if(o==1)
{
s=a[x];
for(int i=0;i<v[x].size();i++)
s+=dfs(v[x][i],0);
}
f[x][o]=s;
return f[x][o];
}
int main()
{
memset(f,-0x3f,sizeof(f));
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
v[y].push_back(x);
vis[x]=1;
if(!vis[y])
root=y;
}
cout<<max(dfs(root,0),dfs(root,1));
return 0;
}