#include <bits/stdc++.h>
using namespace std;
bool x[16002][1602] = {0};
long long y[16002][2] = {0} , a , b , s = INT_MIN , n;
long long node(long long a){
if(y[a][2] == 0){
if(y[a][1] < 0)
return 0;
else
return y[a][1];
}
for(int j = 3 ; j <= n + 2 ; j ++){
if(x[a][j]){
x[a][j] = 0 , x[j - 2][a + 2] = 0;
y[a][1] = node(j - 2) + y[a][1];
if(y[a][1] > s)
s = y[a][1];
}
}
if(y[a][1] <= 0)
return 0;
else
return y[a][1];
}
int main(){
scanf("%d" , &n);
for(int i = 1 ; i <= n ; i ++)
scanf("%d" , &y[i][1]);
for(int i = 2 ; i <= n ; i ++){
scanf("%d%d" , &a , &b);
y[a][2] ++ , y[b][2] ++ , x[b][a + 2] = 1 , x[a][b + 2] = 1;
}
node(n);
printf("%d\n" , s);
return 0;
}
/*
#1 #2 #3 #7 #8 #9 #10 AC
#4 #5 WA
#6 RE
*/