#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 1e5 + 5;
long long n, a[MaxN],dp[MaxN];
vector<long long> vt[MaxN];
void dfs(long long u, long long par)
{
for (long long v : vt[u])
{
if(v==par) continue;
dfs(v,u);
dp[u]+=max(dp[v],0LL);
}
}
void input()
{
cin >> n;
for (long long i=1; i<=n; i++)
{
cin >> a[i];
}
for (long long i=1; i<n ;i++)
{
long long u,v;
cin >> u >> v;
vt[u].push_back(v);
vt[v].push_back(u);
}
}
void solve()
{
for (long long i=1; i<=n; i++)
{
dp[i]=a[i];
}
dfs(1,-1);
long long ans=LLONG_MIN;
for (long long i=1; i<=n; i++)
{
ans=max(ans,dp[i]);
}
cout << ans << "\n";
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
input();
solve();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbG9uZyBsb25nIE1heE4gPSAxZTUgKyA1Owpsb25nIGxvbmcgbiwgYVtNYXhOXSxkcFtNYXhOXTsKdmVjdG9yPGxvbmcgbG9uZz4gdnRbTWF4Tl07CnZvaWQgZGZzKGxvbmcgbG9uZyB1LCBsb25nIGxvbmcgcGFyKQp7CiAgICBmb3IgKGxvbmcgbG9uZyB2IDogdnRbdV0pCiAgICB7CiAgICAgICAgaWYodj09cGFyKSBjb250aW51ZTsKICAgICAgICBkZnModix1KTsKICAgICAgICBkcFt1XSs9bWF4KGRwW3ZdLDBMTCk7CiAgICB9Cn0Kdm9pZCBpbnB1dCgpCnsKICAgIGNpbiA+PiBuOwogICAgZm9yIChsb25nIGxvbmcgaT0xOyBpPD1uOyBpKyspCiAgICB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICB9CiAgICBmb3IgKGxvbmcgbG9uZyBpPTE7IGk8biA7aSsrKQogICAgewogICAgICAgIGxvbmcgbG9uZyB1LHY7CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICB2dFt1XS5wdXNoX2JhY2sodik7CiAgICAgICAgdnRbdl0ucHVzaF9iYWNrKHUpOwogICAgfQp9CnZvaWQgc29sdmUoKQp7CiAgICBmb3IgKGxvbmcgbG9uZyBpPTE7IGk8PW47IGkrKykKICAgIHsKICAgICAgICBkcFtpXT1hW2ldOwogICAgfQogICAgZGZzKDEsLTEpOwogICAgbG9uZyBsb25nIGFucz1MTE9OR19NSU47CiAgICBmb3IgKGxvbmcgbG9uZyBpPTE7IGk8PW47IGkrKykKICAgIHsKICAgICAgICBhbnM9bWF4KGFucyxkcFtpXSk7CiAgICB9CiAgICBjb3V0IDw8IGFucyA8PCAiXG4iOwp9CmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBpbnB1dCgpOwogICAgc29sdmUoKTsKfQo=