#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[100005];
long long dp[100005];
vector<int> ve[100005];
void dfs(int u,int fa){
dp[u] = a[u];
for(int i : ve[u]){
if(i == fa) continue;
dfs(i,u);
dp[u] += max(dp[i],0ll);
}
}
signed main(){
cin >> n;
for(int i = 1;i <= n;i++) cin >> a[i];
for(int i = 1;i < n;i++){
int u,v; cin >> u >> v;
ve[u].push_back(v);
ve[v].push_back(u);
}
dfs(1,0);
long long ans = -1e18;
for(int i = 1;i <= n;i++) ans = max(ans,dp[i]);
cout << ans;
return 0;
}