#include<bits/stdc++.h>
using namespace std;
vector<int>ve[7000];
int n,h[7000],a,b,book[7000],foot,f[7000][7000];
void dp(int x)
{
f[x][0]=0;
f[x][1]=h[x];
for(int i=0;i<ve[x].size();i++)
{
int y=ve[x][i];
dp(y);
f[x][0]+=max(f[y][1],f[y][0]);
f[x][1]+=f[y][0];
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>h[i];
}
for(int i=1;i<=n-1;i++)
{
cin>>a>>b;
ve[b].push_back(a);
book[a]=1;
}
for(int i=1;i<=n;i++)
{
if(book[i]==0)
{
foot=i;
break;
}
}
dp(foot);
cout<<max(f[foot][0],f[foot][1]);
}