#include<bits/stdc++.h>
using namespace std;
const int N = 16010;
int sum[N], val[N];
int h[N], to[N], nxt[N], idx;
void add(int a, int b) {
to[idx] = b;
nxt[idx] = h[a];
h[a] = idx++;
}
int dp[N];
int n;
int mx = INT_MIN;
int dfs(int u, int fa) {
dp[u] = val[u];
for(int i = h[u]; i != -1; i = nxt[i]) {
int v = to[i];
if(v == fa) continue;
int pre = dfs(v, u);
if(pre > 0) dp[u] += dp[v];
}
mx = max(mx, dp[u]);
return dp[u];
}
signed main() {
memset(dp, -1, sizeof dp);
memset(h, -1, sizeof h);
cin >> n;
for(int i = 1; i <= n; i++) cin >> val[i];
for(int i = 1; i < n; i++) {
int a, b;
cin >> a >> b;
add(a, b);
add(b, a);
}
dfs(1, 0);
cout << mx;
return 0;
}