#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N=6000+10;
int n,r[N],f[N][2],ff[N];
vector<int>tree[N];
void dfs(int u)
{
f[u][0]=0;
f[u][1]=r[u];
for(int i=0;i<tree[u].size();i++)
{
int v=tree[u][i];
dfs(v);
f[u][0]+=max(f[v][1],f[v][0]);
f[u][1]+=f[v][0];
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>r[i],ff[i]=-1;
for(int i=1;i<=n;i++)
{
int a,b;
cin>>a>>b;
tree[b].push_back(a);
ff[a]=b;
}
int ft=1;
while(ff[ft]!=-1) ft=ff[ft];
dfs(ft);
cout<<max(f[ft][1],f[ft][0]);
return 0;
}