#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();
	int M = u.size();
	vector<int> ans(N, 0);
	vector<int> sz(N, 0);
	vector<vector<pair<int, int>>> adjList(N);
	for (int i = 0; i < M; ++i) {
		adjList[u[i]].push_back({v[i], c[i]});
		adjList[v[i]].push_back({u[i], c[i]});
	}
	for (int i = 0; i < N; ++i) {
		vector<bool> key(N, false);
		vector<bool> visited(N, false);
		vector<set<int>> potential(N);
		queue<int> q;
		q.push(i);
		while (!q.empty()) {
			int v = q.front();
			q.pop();
			if (visited[v]) continue;
			visited[v] = true;
			++sz[i];
			for (auto con: adjList[v]) {
				if (key[con.second]) {
					q.push(con.first);
				} else {
					potential[con.second].insert(con.first);
				}
			}
			if (!key[r[v]]) {
				key[r[v]] = true;
				while (!potential[r[v]].empty()) {
					q.push(*potential[r[v]].begin());
					potential[r[v]].erase(*potential[r[v]].begin());
				}
			}
		}
	}
	int m = *min_element(sz.begin(), sz.end());
	for (int i = 0; i < N; ++i) if (sz[i] == m) ans[i] = 1;
	//for (int i = 0; i < N; ++i) cout << sz[i];
	return ans;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |