제출 #1314956

#제출 시각아이디문제언어결과실행 시간메모리
1314956PlayVoltz열쇠 (IOI21_keys)C++20
9 / 100
3094 ms23640 KiB
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second

int n, mn=INT_MAX/2;
vector<int> vect, ans;
vector<vector<pii> > graph;

void bfs(int start){
	vector<bool> key(n, 0), visited(n, 0);
	vector<vector<int> > nokey(n);
	queue<int> q;
	q.push(start);
	key[vect[start]]=1;
	while (q.size()){
		int node=q.front();
		q.pop();
		if (visited[node])continue;
		visited[node]=1;
		for (auto num:graph[node])if (!visited[num.fi]){
			if (key[num.se]){
				q.push(num.fi);
				if (!key[vect[num.fi]])for (auto a:nokey[vect[num.fi]])q.push(a);
				key[vect[num.fi]]=1;
			}
			else nokey[num.se].pb(num.fi);
		}
	}
	int res=0;
	for (int i=0; i<n; ++i)if (visited[i])++res;
	if (res<mn)mn=res, ans.clear(), ans.pb(start);
	else if (res==mn)ans.pb(start);
}

vector<int> find_reachable(vector<int> r, vector<int> u, vector<int> v, vector<int> c){
	n=r.size();
	vect=r;
	graph.resize(n);
	for (int i=0; i<u.size(); ++i){
		graph[u[i]].pb(mp(v[i], c[i]));
		graph[v[i]].pb(mp(u[i], c[i]));
	}
	for (int i=0; i<n; ++i)bfs(i);
	vector<int> res(n, 0);
	for (auto a:ans)res[a]=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...