#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
int n, a[20020], ans[20020], maxx;
int cum = 0, ver[20020], Next[20020], head[20020];
void insert(int x, int y) {
cum++; ver[cum] = y; Next[cum] = head[x]; head[x] = cum;
}
void insert2(int x, int y) {
insert(x, y); insert(y, x);
}
void dfs(int x, int fax) {
ans[x] = a[x];
for (int i = head[x]; i; i = Next[i]) {
int v = ver[i];
if (v != fax) {
dfs(v, x);
ans[x] += max(0, ans[v]);
}
}
maxx = max(maxx, ans[x]);
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
for (int i = 1; i <= n - 1; i++) {
int x, y;
scanf("%d%d", &x, &y);
insert2(x, y);
}
dfs(1, 0);
printf("%d", maxx);
return 0;
}