제출 #1336240

#제출 시각아이디문제언어결과실행 시간메모리
1336240ChottuFTraffic (IOI10_traffic)C++20
100 / 100
487 ms156908 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e6+5;
int sz[MAXN];
int val[MAXN];
int par[MAXN];
vector<int> adj[MAXN];

void dfs(int x, int p){
    par[x] = p;
    for (auto u : adj[x]){
        if (u == p) continue;
        dfs(u,x);
        sz[x] += sz[u];
    }
}

int LocateCentre(int N, int pp[], int S[], int D[]) {
    int tot = 0;
    for (int i = 0; i<N; i++){
        sz[i] = pp[i];
        tot += pp[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,-1);
    for (int i = 0; i<N; i++){
        int ww = par[i];
        int one = 0;
        for (auto u : adj[i]){
            if (u == ww) continue;
            one = max(one, sz[u]);
        }
        int two = 0;
        if (ww != -1){
            two = tot - sz[i];
        }
        val[i] = max(one,two);
    }
    int idx = 0;
    for (int i = 0; i<N; i++){
        if (val[idx] > val[i]){
            idx = i;
        }
    }
    return idx;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...