Submission #1172502

#TimeUsernameProblemLanguageResultExecution timeMemory
1172502AlgorithmWarriorTraffic (IOI10_traffic)C++20
100 / 100
446 ms133472 KiB
#include <bits/stdc++.h>
#include "traffic.h"

using namespace std;

static int N,P[1000000],S[1000000],D[1000000];
vector<int>tree[1000000];
int subsz[1000000];

int get_subsz(int nod,int tata,int pp[]){
    subsz[nod]=pp[nod];
    for(auto fiu : tree[nod])
        if(fiu!=tata)
            subsz[nod]+=get_subsz(fiu,nod,pp);
    return subsz[nod];
}

void add_edge(int u,int v){
    tree[u].push_back(v);
    tree[v].push_back(u);
}

int LocateCentre(int N, int pp[], int S[], int D[]) {
    int i;
    for(i=0;i<N-1;++i)
        add_edge(S[i],D[i]);
    get_subsz(0,-1,pp);
    int raspnod=-1;
    int raspsz=2e9+1;
    for(i=0;i<N;++i){
        int maxim=0;
        for(auto fiu : tree[i])
            if(subsz[i]>subsz[fiu] && maxim<subsz[fiu])
                maxim=subsz[fiu];
        if(maxim<subsz[0]-subsz[i])
            maxim=subsz[0]-subsz[i];
        if(raspsz>maxim){
            raspsz=maxim;
            raspnod=i;
        }
    }
    return raspnod;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...