#include<bits/stdc++.h>
using namespace std;
int n,r[6000],fa[6000],dp[6000][2],l,k;
vector<int> son[6000];
void f(int x)
{
dp[x][0] = 0;
dp[x][1] = r[x];
for(int i = 0;i < son[x].size();i++)
{
int v = son[x][i];
f(v);
dp[x][0] += max(0,max(dp[i][0],dp[i][1]));
dp[x][1] += dp[i][0];
}
}
int get_fa(int x)
{
if(fa[x] == x) return x;
return get_fa(fa[x]);
}
int main()
{
cin>>n;
for(int i = 1;i <= n;i++)
{
cin>>r[i];
fa[i] = i;
}
for(int i = 1;i < n;i++)
{
cin>>l>>k;
son[k].push_back(l);
fa[l] = k;
}
f(get_fa(1));
cout<<max(dp[get_fa(1)][0],dp[get_fa(1)][1]);
}
//一绿战9红