Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #define pb push_back
- #define mp make_pair
- using namespace std;
- typedef long long ll;
- const ll INF = 1e17;
- int a[100000];
- ll ans[100000], sm, sum[100000];
- vector <int> g[100000], u;
- ll dfs(int v)
- {
- ll rew;
- u[v] = 1;
- for(int i = 0; i < g[v].size(); i++)
- {
- int to = g[v][i];
- if(!u[to])
- {
- rew = dfs(to);
- ans[v] = max(ans[v], rew);
- sum[v] += rew;
- }
- }
- u[v] = 2;
- ans[v] = max(ans[v], sm - a[v] - sum[v]);
- return sum[v] + a[v];
- }
- int main()
- {
- int n;
- cin >> n;
- u.resize(n);
- for(int i = 0; i < n; i++)
- {
- cin >> a[i];
- sm += a[i];
- }
- //cout << sm << endl;
- for(int i = 0; i < n - 1; i++)
- {
- int a, b;
- cin >> a >> b;
- a--, b--;
- g[a].pb(b);
- g[b].pb(a);
- }
- ll c = dfs(0);
- ll mn = INF;
- int num;
- for(int i = 0; i < n; i++)
- if(mn > ans[i])
- {
- mn = ans[i];
- num = i;
- }
- cout << num + 1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement