#include using namespace std; using ll = long long; #define rep(i, n) for (int i = 0; i < (int)(n); i++) int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); int n; cin >> n; vector s(n); rep(i, n) cin >> s[i]; vector> g(n); rep(i, n - 1) { int a, b; cin >> a >> b; a--; b--; if (s[a] > s[b]) { g[b].push_back(a); } else if (s[a] < s[b]) { g[a].push_back(b); } } vector a(n, -1); function rec = [&](int i) { if (a[i] != -1) return a[i]; ll ans = 0; for (auto j : g[i]) { ans = max(ans, rec(j)); } return a[i] = ans + s[i]; }; ll ans = 0; rep(i, n) { rec(i); ans = max(ans, a[i]); } // rep(i, n) cout << a[i] << " "; // cout << endl; cout << ans << endl; return 0; }