import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Main {
static int[] h;
static Map<Integer, List<Integer>> adjvex=new HashMap<>();
static int[][] dp;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
h=new int[n+1];
dp=new int[n+1][2];
for (int i = 1; i <= n; i++) {
h[i]=in.nextInt();
}
boolean[] flags=new boolean[6005];
for (int i = 1; i <= n-1; i++) {
int l=in.nextInt(),k=in.nextInt();
adjvex.putIfAbsent(k, new ArrayList<>());
adjvex.get(k).add(l);
flags[l]=true;
}
int root=0;
for (int i = 1; i <= n; i++) {
if(!flags[i]) {root=i;break;};
}
dfs(root);
System.out.println(Math.max(dp[root][0], dp[root][1]));
in.close();
}
private static void dfs(int x) {
dp[x][0]=0;
dp[x][1]=h[x];
for (int i = 0;adjvex.get(x)!=null&&i < adjvex.get(x).size(); i++) {
int y=adjvex.get(x).get(i);
dfs(y);
dp[x][0]+=Math.max(dp[y][0], dp[y][1]);
dp[x][1]+=dp[y][0];
}
}
}