#include using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); const ll NEG = -(1LL << 60); int N; cin >> N; vector A(N); for (auto &x : A) cin >> x; vector> G(N); for (int i = 0; i < N - 1; ++i) { int u, v; cin >> u >> v; --u, --v; G[u].push_back(v); G[v].push_back(u); } vector ans(N, NEG); for (int s = 0; s < N; ++s) { vector par(N, -1), dep(N), order = {s}; vector sum(N), best(N, NEG); sum[s] = A[s]; for (int i = 0; i < N; ++i) { int v = order[i]; for (int u : G[v]) { if (u == par[v]) continue; par[u] = v; dep[u] = dep[v] + 1; sum[u] = sum[v] + A[u]; order.push_back(u); } } for (int v : order) { if (v == s) continue; ll d = dep[v]; best[v] = sum[v] - d * (d + 1) / 2; } for (int i = N - 1; i > 0; --i) { int v = order[i]; best[par[v]] = max(best[par[v]], best[v]); } for (int v = 0; v < N; ++v) ans[v] = max(ans[v], best[v]); } cout << *min_element(ans.begin(), ans.end()) << '\n'; }