Submission #1239605

#TimeUsernameProblemLanguageResultExecution timeMemory
1239605hengliaoSphinx's Riddle (IOI24_sphinx)C++20
24 / 100
31 ms1172 KiB
#include "sphinx.h"
#include<bits/stdc++.h>
using namespace std;

#define F first
#define S second
#define pll pair<ll, ll>
#define vll vector<ll>
#define pb push_back

typedef int ll;

namespace{
	
	const ll mxN=255;

	ll n, m;
	vll adj[mxN];
	bool visited[mxN];

	void dfs(ll cur, ll u, ll v){
		if(cur==u || cur==v || visited[cur]) return;
		visited[cur]=1;
		for(auto &it:adj[cur]){
			dfs(it, u, v);
		}
	}

	ll f(ll u, ll v){
		memset(visited, 0, sizeof(visited));
		ll cnt=0;
		for(ll i=0;i<n;i++){
			if(i==u || i==v) continue;
			if(!visited[i]){
				dfs(i, u, v);
				cnt++;
			}
		}
		return cnt;
	}

	
}

vector<int> find_colours(int N, vector<int> X, vector<int> Y){
	n=N;
	m=X.size();
	for(ll i=0;i<m;i++){
		adj[X[i]].pb(Y[i]);
		adj[Y[i]].pb(X[i]);
	}
	vll ans(n);

	auto qry=[&](ll u, ll tar){
		vll tep(n, n);
		tep[u]=-1;
		for(ll i=0;i<=tar;i++){
			tep[adj[u][i]]=i;
		}
		if(tar==n-2){
			if(perform_experiment(tep)==tar+1){
				return true;
			}
			return false;
		}
		if(perform_experiment(tep)==tar+2){
			return true;
		}
		return false;
	};

	for(ll i=0;i<n;i++){
		ll lef=0, rig=n-2;
		ll good=-1;
		while(lef<=rig){
			ll mid=(lef+rig)/2;
			if(qry(i, mid)){
				good=mid;
				rig=mid-1;
			}
			else{
				lef=mid+1;
			}
		}
		if(good==-1){
			ans[i]=n-1;
		}
		else{
			ans[i]=good;
		}
	}

	// cout<<qry(1, 0)<<'\n';

	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...