Submission #435494

#TimeUsernameProblemLanguageResultExecution timeMemory
435494errorgornKeys (IOI21_keys)C++17
37 / 100
222 ms16460 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define ll long long
#define ii pair<ll,ll>
#define fi first
#define se second
 
#define puf push_front
#define pof pop_front
#define pub push_back
#define pob pop_back
#define lb lower_bound
#define ub upper_bound
 
#define rep(x,s,e) for (auto x=s-(s>e);x!=e-(s>e);s<e?x++:x--)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int) (x).size()
 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
 
int n,m;
int type[2005];
 
vector<int> keys[2005];
vector<int> vertice[2005];
int dest[4005];
 
vector<int> proc;
bool vis[2005];
bool vis_key[2005];
int cnt[4005];
 
int reach(int i){
	memset(vis,false,sizeof(vis));
	memset(vis_key,false,sizeof(vis_key));
	memset(cnt,0,sizeof(cnt));
 
	proc={i};
 
	int ans=0;
	while (!proc.empty()){
		int v=proc.back(); proc.pob();
		if (vis[v]) continue;
		vis[v]=true;
		ans++;
 
		for (auto &it:vertice[v]){
			cnt[it]++;
			if (cnt[it]==2) proc.pub(dest[it]);
		}
 
		if (!vis_key[type[v]]){
			vis_key[type[v]]=true;
			for (auto &it:keys[type[v]]){
				cnt[it]++;
				if (cnt[it]==2) proc.pub(dest[it]);
			}
		}
	}
 
	//cout<<i<<" "<<ans<<endl;
	return ans;
}
 
std::vector<int> find_reachable(std::vector<int> R, std::vector<int> U, std::vector<int> V, std::vector<int> C) {
	n=sz(R),m=sz(U);
 
	rep(x,0,n) type[x]=R[x];
 
	rep(x,0,m){
		keys[C[x]].pub(x*2);
		vertice[U[x]].pub(x*2);
		dest[x*2]=V[x];
 
		keys[C[x]].pub(x*2+1);
		vertice[V[x]].pub(x*2+1);
		dest[x*2+1]=U[x];
	}
 
	vector<int> ans;
	int best=1e9;
 
	rep(x,0,n){
		auto temp=reach(x);
		if (best>temp) best=temp,ans.clear();
		if (best==temp) ans.pub(x);
	}
 
	vector<int> res(n,0);
	for (auto &it:ans) res[it]=1;
 
	return res;
}
#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...