#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 200005;
int n;
int w[N], sub[N], dp[N];
vector<int> adj[N];
int res = 0;
void dfs_sub(int u, int p) {
sub[u] = w[u];
for (int v : adj[u]) if (v != p) {
dfs_sub(v, u);
sub[u] += sub[v];
}
}
void dfs_dp(int u, int p) {
dp[u] = sub[u];
int best1 = 0, best2 = 0; // top 2 child contributions
for (int v : adj[u]) if (v != p) {
dfs_dp(v, u);
dp[u] = max(dp[u], sub[u] + dp[v]);
int val = dp[v];
if (val > best1) {
best2 = best1;
best1 = val;
} else if (val > best2) {
best2 = val;
}
}
res = max(res, sub[u] + best1 + best2);
}
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 1; i <= n; i++) cin >> w[i];
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs_sub(1, 0);
dfs_dp(1, 0);
cout << res << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGludCBsb25nIGxvbmcKCmNvbnN0IGludCBOID0gMjAwMDA1OwppbnQgbjsKaW50IHdbTl0sIHN1YltOXSwgZHBbTl07CnZlY3RvcjxpbnQ+IGFkaltOXTsKaW50IHJlcyA9IDA7Cgp2b2lkIGRmc19zdWIoaW50IHUsIGludCBwKSB7CiAgICBzdWJbdV0gPSB3W3VdOwogICAgZm9yIChpbnQgdiA6IGFkalt1XSkgaWYgKHYgIT0gcCkgewogICAgICAgIGRmc19zdWIodiwgdSk7CiAgICAgICAgc3ViW3VdICs9IHN1Ylt2XTsKICAgIH0KfQoKdm9pZCBkZnNfZHAoaW50IHUsIGludCBwKSB7CiAgICBkcFt1XSA9IHN1Ylt1XTsKICAgIGludCBiZXN0MSA9IDAsIGJlc3QyID0gMDsgLy8gdG9wIDIgY2hpbGQgY29udHJpYnV0aW9ucwogICAgZm9yIChpbnQgdiA6IGFkalt1XSkgaWYgKHYgIT0gcCkgewogICAgICAgIGRmc19kcCh2LCB1KTsKICAgICAgICBkcFt1XSA9IG1heChkcFt1XSwgc3ViW3VdICsgZHBbdl0pOwogICAgICAgIGludCB2YWwgPSBkcFt2XTsKICAgICAgICBpZiAodmFsID4gYmVzdDEpIHsKICAgICAgICAgICAgYmVzdDIgPSBiZXN0MTsKICAgICAgICAgICAgYmVzdDEgPSB2YWw7CiAgICAgICAgfSBlbHNlIGlmICh2YWwgPiBiZXN0MikgewogICAgICAgICAgICBiZXN0MiA9IHZhbDsKICAgICAgICB9CiAgICB9CiAgICByZXMgPSBtYXgocmVzLCBzdWJbdV0gKyBiZXN0MSArIGJlc3QyKTsKfQoKaW50MzJfdCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKCiAgICBjaW4gPj4gbjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IHdbaV07CiAgICBmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKykgewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBhZGpbdl0ucHVzaF9iYWNrKHUpOwogICAgfQoKICAgIGRmc19zdWIoMSwgMCk7CiAgICBkZnNfZHAoMSwgMCk7CgogICAgY291dCA8PCByZXMgPDwgIlxuIjsKICAgIHJldHVybiAwOwp9Cg==