#include<bits/stdc++.h>
#define TIME (1.0* clock()/CLOCKS_PER_SEC)
#define pb push_back
#define eb emplace_back
#define id1 (id<<1)
#define id2 (id<<1)|1
#define ll long long
#define ii pair<int,int>
#define vi vector<int>
#define vii vector<pair<int,int>>
#define vl vector<long long>
#define vll vector <pair<ll,ll>>
#define li pair<long long,int>
#define vil vector <pair<int,ll>>
#define db double
#define ff first
#define ss second
#define lb lower_bound
#define ub upper_bound
#define FOR(i, a, b) for (int i = (a); i <=(b); i++)
#define F0R(i, a) FOR(i, 0, a-1)
#define ROF(i, a, b) for (int i = (b); i >= (a); i--)
#define R0F(i, a) ROF(i, 0, a-1)
#define rep(a) F0R(_, a)
#define each(a, x) for (auto &a : x)
#define ALL(x) (x).begin(),(x).end()
#define pq priority_queue <li, vector <li>, greater <li>>
using namespace std;
const int maxn=2e5+5;
//const int MOD=1e9+7;
//const int MOD=998244353;
//const int dx[4]{1, 0, -1, 0}, dy[4]{0, 1, 0, -1};
int n;
vector<int> ke[maxn];
ll a[maxn];
ll subtree[maxn];
ll dp[maxn];
ll total,ans;
void dfs(int u,int p,int depth){
subtree[u]=a[u];
dp[1]+=depth*a[u];
for(int v:ke[u]){
if(v==p) continue;
dfs(v,u,depth+1);
subtree[u]+=subtree[v];
}
}
void dfs2(int u,int p){
for(int v:ke[u]){
if(v==p) continue;
dp[v]=dp[u]+total-2*subtree[v];
ans=max(ans,dp[v]);
dfs2(v,u);
}
}
void solve(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
total+=a[i];
}
for(int i=1;i<n;i++){
int u,v;
cin>>u>>v;
ke[u].pb(v);
ke[v].pb(u);
}
dfs(1,0,0);
ans=dp[1];
dfs2(1,0);
cout<<ans;
return;
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
if (fopen("TASK.INP", "r")){
freopen("TASK.INP", "r", stdin);
freopen("TASK.OUT", "w", stdout);
}
int ntest;
ntest=1;
//cin>>ntest;
for(int i=1;i<=ntest;i++) solve();
cerr<<"\n"<<"Time elapsed "<<TIME<<"s.\n";
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBUSU1FICgxLjAqIGNsb2NrKCkvQ0xPQ0tTX1BFUl9TRUMpCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgZWIgZW1wbGFjZV9iYWNrCiNkZWZpbmUgaWQxIChpZDw8MSkKI2RlZmluZSBpZDIgKGlkPDwxKXwxCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgdmlpIHZlY3RvcjxwYWlyPGludCxpbnQ+PiAKI2RlZmluZSB2bCB2ZWN0b3I8bG9uZyBsb25nPgojZGVmaW5lIHZsbCB2ZWN0b3IgPHBhaXI8bGwsbGw+PgojZGVmaW5lIGxpIHBhaXI8bG9uZyBsb25nLGludD4KI2RlZmluZSB2aWwgdmVjdG9yIDxwYWlyPGludCxsbD4+CiNkZWZpbmUgZGIgZG91YmxlCiNkZWZpbmUgZmYgZmlyc3QKI2RlZmluZSBzcyBzZWNvbmQKI2RlZmluZSBsYiBsb3dlcl9ib3VuZAojZGVmaW5lIHViIHVwcGVyX2JvdW5kCiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvciAoaW50IGkgPSAoYSk7IGkgPD0oYik7IGkrKykKI2RlZmluZSBGMFIoaSwgYSkgRk9SKGksIDAsIGEtMSkKI2RlZmluZSBST0YoaSwgYSwgYikgZm9yIChpbnQgaSA9IChiKTsgaSA+PSAoYSk7IGktLSkKI2RlZmluZSBSMEYoaSwgYSkgUk9GKGksIDAsIGEtMSkKI2RlZmluZSByZXAoYSkgRjBSKF8sIGEpCiNkZWZpbmUgZWFjaChhLCB4KSBmb3IgKGF1dG8gJmEgOiB4KQojZGVmaW5lIEFMTCh4KSAoeCkuYmVnaW4oKSwoeCkuZW5kKCkKI2RlZmluZSBwcSBwcmlvcml0eV9xdWV1ZSA8bGksIHZlY3RvciA8bGk+LCBncmVhdGVyIDxsaT4+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgbWF4bj0yZTUrNTsKLy9jb25zdCBpbnQgTU9EPTFlOSs3OwovL2NvbnN0IGludCBNT0Q9OTk4MjQ0MzUzOwovL2NvbnN0IGludCBkeFs0XXsxLCAwLCAtMSwgMH0sIGR5WzRdezAsIDEsIDAsIC0xfTsKaW50IG47CnZlY3RvcjxpbnQ+IGtlW21heG5dOwoKbGwgYVttYXhuXTsKbGwgc3VidHJlZVttYXhuXTsKbGwgZHBbbWF4bl07CmxsIHRvdGFsLGFuczsKCnZvaWQgZGZzKGludCB1LGludCBwLGludCBkZXB0aCl7CiAgc3VidHJlZVt1XT1hW3VdOwogIGRwWzFdKz1kZXB0aCphW3VdOwogIGZvcihpbnQgdjprZVt1XSl7CiAgICBpZih2PT1wKSBjb250aW51ZTsKICAgIGRmcyh2LHUsZGVwdGgrMSk7CiAgICBzdWJ0cmVlW3VdKz1zdWJ0cmVlW3ZdOwogIH0KfQoKdm9pZCBkZnMyKGludCB1LGludCBwKXsKICBmb3IoaW50IHY6a2VbdV0pewogICAgaWYodj09cCkgY29udGludWU7CiAgICBkcFt2XT1kcFt1XSt0b3RhbC0yKnN1YnRyZWVbdl07CiAgICBhbnM9bWF4KGFucyxkcFt2XSk7CiAgICBkZnMyKHYsdSk7CiAgfQp9CgoKdm9pZCBzb2x2ZSgpewogIGNpbj4+bjsKICBmb3IoaW50IGk9MTtpPD1uO2krKyl7CiAgICBjaW4+PmFbaV07CiAgICB0b3RhbCs9YVtpXTsKICB9CiAgZm9yKGludCBpPTE7aTxuO2krKyl7CiAgICBpbnQgdSx2OwogICAgY2luPj51Pj52OwogICAga2VbdV0ucGIodik7CiAgICBrZVt2XS5wYih1KTsKICB9CgogIGRmcygxLDAsMCk7CiAgYW5zPWRwWzFdOwoKICBkZnMyKDEsMCk7CiAgY291dDw8YW5zOwogIHJldHVybjsKfQpzaWduZWQgbWFpbigpewogIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogIGNpbi50aWUoTlVMTCk7Y291dC50aWUoTlVMTCk7CiAgaWYgKGZvcGVuKCJUQVNLLklOUCIsICJyIikpewogICAgICBmcmVvcGVuKCJUQVNLLklOUCIsICJyIiwgc3RkaW4pOwogICAgICBmcmVvcGVuKCJUQVNLLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICB9CiAgaW50IG50ZXN0OwogIG50ZXN0PTE7CiAgLy9jaW4+Pm50ZXN0OwogIAogIGZvcihpbnQgaT0xO2k8PW50ZXN0O2krKykgc29sdmUoKTsKICBjZXJyPDwiXG4iPDwiVGltZSBlbGFwc2VkICI8PFRJTUU8PCJzLlxuIjsKICByZXR1cm4gMDsKfQ==