#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=16000+111;
int n,a[2*maxn];
int dp[2*maxn];
bool vis[2*maxn];
vector<int> vt[2*maxn];
void dfs(int u)
{
vis[u]=true;
dp[u]=a[u];
for(int i=0;i<vt[u].size();i++)
{
int v=vt[u][i];
if(!vis[v])
{
dfs(v);
if(dp[v]>0)dp[u]+=dp[v];
}
}
}
signed main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
for(int i=1;i<=n-1;i++)
{
int du,dv;scanf("%lld %lld",&du,&dv);
vt[du].push_back(dv);
vt[dv].push_back(du);
}
dfs(1);
int ans_MAX_PRO_PLUS=0;
for(int i=1;i<=n;i++)
{
if(dp[i]>ans_MAX_PRO_PLUS)ans_MAX_PRO_PLUS=dp[i];
}
cout<<ans_MAX_PRO_PLUS;
return 0;
}