#include using namespace std; #define int long long #define rep(i, n) for(int i = 0; i < (int)(n); ++i) int solve(void) { int N; cin >> N; vector S(N); rep(i, N) cin >> S[i]; vector deg(N, 0); vector> G(N); rep(_, N - 1) { int U, V; cin >> U >> V, --U, --V; if(S[U] < S[V]) swap(U, V); if(S[U] == S[V]) continue; G[U].push_back(V); deg[V] += 1; } vector ans(N, 0); queue que; rep(v, N) if(deg[v] == 0) que.push(v); while(!que.empty()) { int v = que.front(); que.pop(); ans[v] += S[v]; for(auto nv : G[v]) { deg[nv] -= 1; ans[nv] = max(ans[nv], ans[v]); if(deg[nv] == 0) que.push(nv); } } int res = 0; rep(v, N) res = max(res, ans[v]); cout << res << "\n"; return 0; } signed main(void) { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int Testcases = 1; //cin >> Testcases; while(Testcases--) solve(); return 0; }