Submission #1201522

#TimeUsernameProblemLanguageResultExecution timeMemory
1201522HappyCapybaraKeys (IOI21_keys)C++17
37 / 100
3096 ms46120 KiB
#include<bits/stdc++.h>
using namespace std;

vector<int> find_reachable(vector<int> r, vector<int> u, vector<int> v, vector<int> c){
	int n = r.size(), m = u.size();
	vector<int> res(n, 0);
	int smol = n+1;
	map<int,vector<int>> e;
	for (int i=0; i<m; i++) e[c[i]].push_back(i);
	vector<vector<int>> g(n);
	for (int i=0; i<m; i++){
		g[u[i]].push_back(i);
		g[v[i]].push_back(i);
	}
	for (int i=0; i<n; i++){
		vector<bool> seen(n, false), done(m, false);
		set<int> rch, unlk;
		queue<int> q;
		q.push(i);
		while (!q.empty()){
			int cur = q.front();
			q.pop();
			if (seen[cur]) continue;
			seen[cur] = true;
			res[i]++;
			if (!done[r[cur]]){
				for (int next : e[r[cur]]){
					if (unlk.find(next) != unlk.end()) continue;
					unlk.insert(next);
					if (rch.find(next) != rch.end()){
						q.push(u[next]);
						q.push(v[next]);
					}
				}
			}
			done[r[cur]] = true;
			for (int next : g[cur]){
				if (rch.find(next) != rch.end()) continue;
				rch.insert(next);
				if (unlk.find(next) != unlk.end()) q.push(u[next]+v[next]-cur);
			}
		}
		smol = min(smol, res[i]);
	}
	vector<int> ans(n);
	for (int i=0; i<n; i++) ans[i] = (res[i] == smol);
	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...