#include using namespace std; using ll = long long; bool chmax(auto &a, auto b) { return a < b ? a = b, 1 : 0; } bool chmin(auto &a, auto b) { return a > b ? a = b, 1 : 0; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int N; cin >> N; vector S(N); for (auto &&s : S) cin >> s; vector> G(N); for (int i = 1; i < N; ++i) { int u, v; cin >> u >> v; --u, --v; G[u].emplace_back(v); G[v].emplace_back(u); } vector ord(N); iota(ord.begin(), ord.end(), 0); sort(ord.begin(), ord.end(), [&](int l, int r) { return S[l] < S[r]; }); ll ans = -1; vector dp(N, -1); auto dfs = [&](auto self, int u) -> ll { if (!chmax(dp[u], 0)) return dp[u]; for (int &v : G[u]) { if (S[v] > S[u]) chmax(dp[u], self(self, v)); } return dp[u] += S[u]; }; for (int i = N; i--; ) { chmax(ans, dfs(dfs, ord[i])); } cout << ans << '\n'; }