Submission #1337037

#TimeUsernameProblemLanguageResultExecution timeMemory
1337037JohanEaster Eggs (info1cup17_eastereggs)C++20
10 / 100
98 ms660 KiB
#include <bits/stdc++.h>
#include "grader.h"

using namespace std;
vector < int > x;
map < int , int > sub, par;
map < int , set < int > > adj;
void dfs(int u, int p){
	sub[u] = 1;
	par[u] = p;
	x.push_back(u);
	for(auto v : adj[u]){
		if(v == p)
			continue;
		dfs(v, u);
		sub[u] += sub[v];
	}
}
int findEgg(int n, vector < pair < int, int > > bridges){
	for(auto e : bridges){
		int u = e.first;
		int v = e.second;
		adj[u].insert(v);
		adj[v].insert(u);
	}
	set < int > nodes;
	for(int i = 1; i <= n; i++)
		nodes.insert(i);
	int tt = 10;
	while((int)nodes.size() > 1){
//		tt--;
//		if(!tt)break;
 		sub.clear();
 		par.clear();
		int U = *nodes.begin();
		dfs(U, 0);
		int nn = nodes.size(), mx = 0, cen;
		for(auto i : nodes){
			int up = nn - sub[i];
			int dw = sub[i];
			if(up * dw > mx){
				mx = up * dw;
				cen = i;
			}
		}
		x.clear();
//		cout << cen << endl;
		dfs(cen, par[cen]);
//		for(auto i : x)
//			cout << i << ' ';
//		cout << endl;
		if(query(x)){
			vector < int > xx;
			for(auto i : nodes){
				if(count(x.begin(), x.end(), i) == 0)
					xx.push_back(i);
			}
			x = xx;
		}
		for(auto i : x)nodes.erase(i);
		for(int i = 0; i <= n; i++)adj[i].clear();
		for(auto e : bridges){
			int u = e.first;
			int v = e.second;
			if(!nodes.count(u) || !nodes.count(v))
				continue;
			adj[u].insert(v);
			adj[v].insert(u);
		}
	}
	return *nodes.begin();
}
/*
5
1 2
1 3
2 4
4 5
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...