Submission #1146430

#TimeUsernameProblemLanguageResultExecution timeMemory
1146430ReLiceEaster Eggs (info1cup17_eastereggs)C++20
0 / 100
290 ms196608 KiB
#include "grader.h"
#include <bits/stdc++.h>
#define ll int
#define ld double
#define pb push_back
#define pf push_front
#define ins insert
#define fr first
#define sc second
#define endl "\n"
#define all(x) x.begin(), x.end()

using namespace std;

const ll M = 1e3 + 5;

vector<vector<ll>> d(M), g(M);
ll mx = 0;

void dfs(ll v, ll p, ll dd){
	d[dd].pb(v);
	mx = max(mx, dd);
	
	for(auto i : g[v]){
		if(i == p) continue;
		dfs(i, v, dd + 1);
	}
}

int findEgg (int n, vector <pair<int, int>> bridges){
    ll i;
    
    for(i=0;i<n - 1;i++){
		auto [a, b] = bridges[i];
		g[a].pb(b);
		g[b].pb(a);
	}
	
	dfs(1, 0, 1);
	
	ll l = 0, r = mx;
	
	while(l + 1 < r){
		ll m = (l + r) / 2;
		
		vector<ll> q;
		
		for(i=1;i<=m;i++){
			for(auto j : d[i]) q.pb(j);
		}
		
		if(query(q)) r = m;
		else l = m;
	}
	ll x = r;
	l = 0, r = d[x].size();
	
	while(l + 1 < r){
		ll m = (l + r) / 2;
		
		vector<ll> q;
		
		for(i=1;i<x;i++){
			for(auto j : d[i]) q.pb(j);
		}
		
		for(i=0;i<m;i++) q.pb(d[x][i]);
		
		if(query(q)) r = m;
		else l = m;
	}
	
	return d[x][r - 1];
}











#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...