#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 ans(N, -(1LL << 60)); for (int s = 0; s < N; ++s) { vector par(N, -1), dep(N), order = {s}; vector sum(N), best(N); sum[s] = A[s]; for (int i = 0; i < (int)order.size(); ++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) best[v] = sum[v] - dep[v]; 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'; }