Submission #1354216

#TimeUsernameProblemLanguageResultExecution timeMemory
1354216toast12Traffic (IOI10_traffic)C++20
100 / 100
313 ms149132 KiB
#include "traffic.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> a;
vector<vector<int>> adj;

int tot = 0;
int mx = INT_MAX, ans = 0;

int dfs(int cur, int p) {
    int sum = 0;
    int m = 0;
    for (auto e : adj[cur]) {
        if (e != p) {
            int cnt = dfs(e, cur);
            m = max(cnt, m);
            sum += cnt;
        }
    }
    m = max(m, tot-a[cur]-sum);
    if (m < mx) {
        mx = m;
        ans = cur;
    }
    return sum+a[cur];
}

int LocateCentre(int N, int P[], int S[], int D[]) {
    adj.resize(N);
    a.resize(N);
    for (int i = 0; i < N; i++) {
        a[i] = P[i];
        tot += a[i];
    }
    for (int i = 0; i < N-1; i++) {
        adj[S[i]].push_back(D[i]);
        adj[D[i]].push_back(S[i]);
    }
    dfs(0, 0);
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...