func_code_string: #include <bits/stdc++.h>   using namespace std;   const long double PI = 3.14159265359;   const long long MOD = (long long)998244353ll;   const long long MAXN = (long long)2e5 + 10;   const long long INF = (long long)2242545357980376863;   const long double EPS = (long double)1e-8;   long long su = 0;   long long a[MAXN], dp1[MAXN], dp2[MAXN], dp3[MAXN];   vector<long long> G[MAXN];   void DFS(long long u, long long p) {     dp1[u] = 0;     dp2[u] = 0;     for (auto adj : G[u]) {       if (adj == p) continue;       DFS(adj, u);       dp1[u] += dp1[adj];       dp2[u] += dp2[adj];     }     dp2[u] += dp1[u];     dp1[u] += a[u];   }   void DFS2(long long u, long long p, long long v) {     dp3[u] = v;     long long tot = 0;     for (auto adj : G[u]) {       if (adj == p) continue;       DFS2(adj, u, (v + dp2[u] - (dp2[adj] + dp1[adj])) + (su - dp1[adj]));     }     return;   }   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     long long n;     cin >> n;     for (int i = 1; i <= n; i++) cin >> a[i];     for (int i = 1; i <= n; i++) su += a[i];     long long u, v;     for (int i = 1; i < n; i++) {       cin >> u >> v;       G[u].push_back(v);       G[v].push_back(u);     }     DFS(1, -1);     DFS2(1, -1, 0);     long long ans = 0;     for (int i = 1; i <= n; i++) ans = max(ans, dp2[i] + dp3[i]);     cout << ans;     return 0;   }   