Submission #1288237

#TimeUsernameProblemLanguageResultExecution timeMemory
1288237Jawad_Akbar_JJTraffic (IOI10_traffic)C++20
100 / 100
713 ms169284 KiB
#include <iostream>
#include <vector>

using namespace std;
#define Int long long
const Int M = 1<<20;
vector<Int> nei[M];
Int Mx[M], Pop[M], cst[M], Ans, maxAns = 1e17;

void dfs(Int u, Int p){
	cst[u] = Pop[u];
	for (Int i : nei[u]){
		if (i == p)
			continue;
		dfs(i, u);
		cst[u] += cst[i];
		Mx[u] = max(Mx[u], cst[i]);
	}
}

void dfs2(Int u, Int p){
	if (max(Mx[u], cst[p]) < maxAns)
		Ans = u, maxAns = max(Mx[u], cst[p]);

	for (Int i : nei[u]){
		if (i == p)
			continue;
		cst[u] += cst[p] - cst[i];
		dfs2(i, u);
		cst[u] += cst[i] - cst[p];
	}
}

int LocateCentre(int n, int p[], int s[], int d[]){
	for (Int i=0;i<n-1;i++){
		s[i]++;
		d[i]++;
		nei[s[i]].push_back(d[i]);
		nei[d[i]].push_back(s[i]);
	}

	for (Int i=0;i<n;i++)
		Pop[i+1] = p[i];

	dfs(1, 0);
	dfs2(1, 0);

	return Ans - 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...