#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int line[6060];
int res[6060][2];
int son[6060][6060];
bool vis[6060];
void dp(int x)
{
res[x][0] = 0;
res[x][1] = line[x];
for(int i = 1;i <= son[x][0]; ++i)
{
int num = son[x][i];
dp(num);
res[x][0] = max(res[num][0],res[num][1]);
res[x][1] += res[num][0];
}
return ;
}
int main()
{
int n;
int a,b;
scanf("%d",&n);
for(int i = 1;i <= n; ++i)
{
scanf("%d",&line[i]);
}
for(int i = 1;i <= n-1; ++i)
{
scanf("%d%d",&a,&b);
son[b][0]++;
son[b][son[b][0]] = a;
vis[i] = true;
}
int root;
for(int i = 1;i <= n; ++i)
{
if(vis[i] = false)
{
root = i;
}
}
dp(root);
printf("%d",max(res[root][0],res[root][1]));
return 0;
}