#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
vector<int> r(n + 1);
for (int i = 1; i <= n; i++) {
cin >> r[i];
}
vector<vector<int>> g(n + 1);
for (int i = 0; i < n - 1; i++) {
int a, b;
cin >> a >> b;
g[a].push_back(b);
g[b].push_back(a);
}
vector<long long> dp(n + 1, 0);
vector<int> p(n + 1, -1);
queue<int> q;
q.push(1);
p[1] = 0;
dp[1] = r[1];
long long wynik = 0;
while (!q.empty()) {
int v = q.front();
q.pop();
bool lisc = true;
for (int u : g[v]) {
if (u == p[v]) continue;
lisc = false;
p[u] = v;
dp[u] = dp[v] + r[u];
q.push(u);
}
if (lisc) {
wynik = max(wynik, dp[v]);
}
}
cout << wynik;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGludCBuOwogICAgY2luID4+IG47CiAgICB2ZWN0b3I8aW50PiByKG4gKyAxKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGNpbiA+PiByW2ldOwogICAgfQogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBnKG4gKyAxKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgewogICAgICAgIGludCBhLCBiOwogICAgICAgIGNpbiA+PiBhID4+IGI7CiAgICAgICAgZ1thXS5wdXNoX2JhY2soYik7CiAgICAgICAgZ1tiXS5wdXNoX2JhY2soYSk7CiAgICB9CiAgICB2ZWN0b3I8bG9uZyBsb25nPiBkcChuICsgMSwgMCk7CiAgICB2ZWN0b3I8aW50PiBwKG4gKyAxLCAtMSk7CiAgICBxdWV1ZTxpbnQ+IHE7CiAgICBxLnB1c2goMSk7CiAgICBwWzFdID0gMDsKICAgIGRwWzFdID0gclsxXTsKICAgIGxvbmcgbG9uZyB3eW5payA9IDA7CiAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgIGludCB2ID0gcS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgYm9vbCBsaXNjID0gdHJ1ZTsKICAgICAgICBmb3IgKGludCB1IDogZ1t2XSkgewogICAgICAgICAgICBpZiAodSA9PSBwW3ZdKSBjb250aW51ZTsKICAgICAgICAgICAgbGlzYyA9IGZhbHNlOwogICAgICAgICAgICBwW3VdID0gdjsKICAgICAgICAgICAgZHBbdV0gPSBkcFt2XSArIHJbdV07CiAgICAgICAgICAgIHEucHVzaCh1KTsKICAgICAgICB9CiAgICAgICAgaWYgKGxpc2MpIHsKICAgICAgICAgICAgd3luaWsgPSBtYXgod3luaWssIGRwW3ZdKTsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8IHd5bmlrOwp9