#include using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); 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 F(N); for (int r = 0; r < N; ++r) { ll best = A[r]; vector> st = {{r, -1, 0, A[r]}}; while (!st.empty()) { auto [v, p, d, sum] = st.back(); st.pop_back(); best = max(best, sum - 1LL * d * (d + 1) / 2); for (int u : G[v]) { if (u == p) continue; st.push_back({u, v, d + 1, sum + A[u]}); } } F[r] = best; } cout << *min_element(F.begin(), F.end()) << '\n'; }