#include "traffic.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define sp <<" "<<
#define endl "\n"
int LocateCentre(int N, int pp[], int S[], int D[]) {
    vector<vector<int>> adj(N);
    for (int i = 0; i < N-1; i++) {
        int u = S[i], v = D[i];
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    vector<ll> sum(N);
    auto solve = [&](auto &&solve, int u, int p) -> void {
        sum[u] += pp[u];
        for (auto &v : adj[u]) {
            if (v != p) {
                solve(solve, v, u);
                sum[u] += sum[v];
            }
        }
    };
    solve(solve, 0, 0);
    vector<ll> cand(N);
    auto work = [&](auto &&work, int u, int p) -> void {
        cand[u] = sum[0] - sum[u];
        for (auto &v : adj[u]) {
            if (v != p) {
                cand[u] = max(cand[u], sum[v]);
                work(work, v, u);
            }
        }
    };
    work(work, 0, 0);
    vector<int> o(N);
    iota(o.begin(), o.end(), 0);
    sort(o.begin(), o.end(), [&](int i, int j) {
        if (cand[i] == cand[j]) return i < j;
        return cand[i] < cand[j];
    });
    // for (int i = 0; i < N; i++) {
    //     cerr << i sp cand[i] << endl;
    // }
    return o[0];
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |