#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int n;
int r[100];
bool cha[100];
int root;
int dp[100][2];
vector<int> tree[100];
void DFS(int u)
{
dp[u][0]=0;
dp[u][1]=r[u];
for(vector<int>::iterator it =tree[u].begin(); it != tree[u].end(); it++)
{
DFS((*it));
dp[u][0]=dp[u][0]+max(dp[(*it)][1],dp[(*it)][0]);
dp[u][1]=dp[u][1]+dp[(*it)][0];
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=6000;i++)
{
scanf("%d",&r[i]);
}
for(int i=1 ,a,b;i<=6000;i++)
{
scanf("%d",&a);
scanf("%d",&b);
cha[b] = true;
tree[a].push_back(b);
}
for(int i=1;i<=6000;i++)
{
if(cha[i] == false)
{
root=i;
break;
}
}
DFS(root);
printf("%d",max(dp[root][0],dp[root][1]));
}