#include <bits/stdc++.h>
using namespace std;
long long sum[500000 + 5];
long long b[500000 + 5];
void DFS(long long node, vector<long long> G[], long long used[], long long parent[]) {
used[node] = 1;
for (long long neighbour : G[node]) {
if (used[neighbour] == 0) {
parent[neighbour] = node;
DFS(neighbour, G, used, parent);
}
}
long long best = 0;
for (long long child : G[node]) {
if (child != parent[node]) {
best = max(best, sum[child]);
}
}
sum[node] = b[node] + best;
}
int main() {
long long n;
cin >> n;
vector<long long> G[n + 1];
for (long long i = 1; i <= n; i++) {
cin >> b[i];
}
for (long long i = 1; i <= n - 1; i++) {
long long u, v;
cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
long long used[n + 1] = {};
long long parent[n + 1] = {};
DFS(1, G, used, parent);
long long answer = -1000000000000000LL;
for (long long i = 1; i <= n; i++) {
answer = max(answer, sum[i]);
}
cout << answer;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpsb25nIGxvbmcgc3VtWzUwMDAwMCArIDVdOwpsb25nIGxvbmcgYls1MDAwMDAgKyA1XTsKCnZvaWQgREZTKGxvbmcgbG9uZyBub2RlLCB2ZWN0b3I8bG9uZyBsb25nPiBHW10sIGxvbmcgbG9uZyB1c2VkW10sIGxvbmcgbG9uZyBwYXJlbnRbXSkgewogICAgdXNlZFtub2RlXSA9IDE7CgogICAgZm9yIChsb25nIGxvbmcgbmVpZ2hib3VyIDogR1tub2RlXSkgewogICAgICAgIGlmICh1c2VkW25laWdoYm91cl0gPT0gMCkgewogICAgICAgICAgICBwYXJlbnRbbmVpZ2hib3VyXSA9IG5vZGU7CiAgICAgICAgICAgIERGUyhuZWlnaGJvdXIsIEcsIHVzZWQsIHBhcmVudCk7CiAgICAgICAgfQogICAgfQoKICAgIGxvbmcgbG9uZyBiZXN0ID0gMDsKCiAgICBmb3IgKGxvbmcgbG9uZyBjaGlsZCA6IEdbbm9kZV0pIHsKICAgICAgICBpZiAoY2hpbGQgIT0gcGFyZW50W25vZGVdKSB7CiAgICAgICAgICAgIGJlc3QgPSBtYXgoYmVzdCwgc3VtW2NoaWxkXSk7CiAgICAgICAgfQogICAgfQoKICAgIHN1bVtub2RlXSA9IGJbbm9kZV0gKyBiZXN0Owp9CgppbnQgbWFpbigpIHsKICAgIGxvbmcgbG9uZyBuOwogICAgY2luID4+IG47CgogICAgdmVjdG9yPGxvbmcgbG9uZz4gR1tuICsgMV07CgogICAgZm9yIChsb25nIGxvbmcgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgY2luID4+IGJbaV07CiAgICB9CgogICAgZm9yIChsb25nIGxvbmcgaSA9IDE7IGkgPD0gbiAtIDE7IGkrKykgewogICAgICAgIGxvbmcgbG9uZyB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CgogICAgICAgIEdbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIEdbdl0ucHVzaF9iYWNrKHUpOwogICAgfQoKICAgIGxvbmcgbG9uZyB1c2VkW24gKyAxXSA9IHt9OwogICAgbG9uZyBsb25nIHBhcmVudFtuICsgMV0gPSB7fTsKCiAgICBERlMoMSwgRywgdXNlZCwgcGFyZW50KTsKCiAgICBsb25nIGxvbmcgYW5zd2VyID0gLTEwMDAwMDAwMDAwMDAwMDBMTDsKCiAgICBmb3IgKGxvbmcgbG9uZyBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBhbnN3ZXIgPSBtYXgoYW5zd2VyLCBzdW1baV0pOwogICAgfQoKICAgIGNvdXQgPDwgYW5zd2VyOwoKICAgIHJldHVybiAwOwp9