import java.util.*;
public class Main {
static int N=100010;
static int M=200010;
static int idx,n;
static int []h=new int[N];
static int []e=new int[M];
static int []ne=new int[M];
static long []f=new long[N];
static long []happy=new long[N];
public static void main(String[] args){
Scanner in =new Scanner(System.in);
n=in.nextInt();
for(int i=1;i<=n;i++){
happy[i]=in.nextLong();
}
Arrays.fill(h,-1);
for(int i=0;i<n-1;i++){
int l=in.nextInt();
int r=in.nextInt();
add(l,r);
add(r,l);
}
dfs(1,-1);
long res=f[1];
for(int i=2;i<=n;i++){
res=Math.max(f[i],res);
}
res=Math.max(res,0);
System.out.println(res);
}
static void add(int l,int r){
e[idx]=r;
ne[idx]=h[l];
h[l]=idx++;
}
static void dfs(int u,int father){
f[u]=happy[u];
for(int i=h[u];i!=-1;i=ne[i]){
int j=e[i];
if(j!=father) {
dfs(j,u);
f[u] += Math.max(f[j], 0);
}
}
}
}