#include <bits/stdc++.h>
using namespace std;
int n;
int r[6005];
int g[6005][1005];
int b[6005];
int fa[6005];
int used[6005][2];
int find(int x){
return fa[x]?find(fa[x]):x;
}
void dfs(int u){
used[u][1] = r[u];
used[u][0] = 0;
for(int i = 1;i<=b[u];i++){
int v=g[u][i];
dfs(v);
used[u][0] += max(used[v][0],used[v][1]);
used[u][1] += used[v][0];
}
}
int main(){
cin >> n;
for(int i = 1;i<=n;i++){
cin >> r[i];
}
for(int i = 1;i<=n-1;i++){
int l=0,k=0;
cin >> l >> k;
g[k][b[k]++]=l;
fa[l] = k;
}
int root = 1;
root=find(1);
dfs(root);
cout << max(used[root][1],used[root][0]);
}