#include using namespace std; using ll = long long; int main(){ int N; cin >> N; vector A(N); for (int& x : A) cin >> x; vector> G(N); for (int i = 1; i < N; i++){ int u, v; cin >> u >> v; u--, v--; if (A[u] > A[v]) G[u].push_back(v); if (A[v] > A[u]) G[v].push_back(u); } vector dp(N, 0); vector vis(N, false); auto dfs = [&](auto&& self, int n) -> ll{ if (vis[n]) return dp[n]; dp[n] = A[n], vis[n] = true; for (int v : G[n]) dp[n] = max(dp[n], self(self, v)+A[n]); return dp[n]; }; ll ans = 0; for (int i = 0; i < N; i++) ans = max(ans, dfs(dfs, i)); cout << ans << endl; }