#include #include using namespace std; using ll = long long; #define rep(i, s, t) for (ll i = s; i < (ll)(t); i++) #define all(x) begin(x), end(x) template bool chmin(T& x, T y) { return x > y ? (x = y, true) : false; } template bool chmax(T& x, T y) { return x < y ? (x = y, true) : false; } void solve() { int n; cin >> n; vector s(n); rep(i, 0, n) cin >> s[i]; vector> g(n); rep(i, 0, n - 1) { int a, b; cin >> a >> b; a--, b--; g[a].push_back(b); g[b].push_back(a); } ll ans = 0; auto dfs = [&](auto self, int nw, int pr) -> pair { ll mx = 0, mn = 0; for (int nx : g[nw]) { if (nx == pr) continue; auto [x, y] = self(self, nx, nw); if (s[nw] < s[nx]) chmax(mx, x); if (s[nw] > s[nx]) chmax(mn, y); } mx += s[nw], mn += s[nw]; chmax(ans, max(mx, mn)); return {mx, mn}; }; dfs(dfs, 0, -1); cout << ans << '\n'; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(15); int t = 1; // cin >> t; while (t--) solve(); }