#include <vector>
#include <map>
#include <queue>
#include <set>
using namespace std;
vector<pair<int,int>> adj[300000];
vector<int> find_reachable(vector<int> r, vector<int> u, vector<int> v, vector<int> c) {
	vector<int> tot(r.size(), 0);
	for (int i = 0; i < u.size(); i++) {
		adj[u[i]].emplace_back(v[i], c[i]);
		adj[v[i]].emplace_back(u[i], c[i]);
	}
	for (int i = 0; i < r.size(); i++) {
		queue<int> q;
		q.push(i);
		map<int, vector<int>> mp;
		set<int> keys;
		vector<bool> vis(r.size(), 0);
		for (; !q.empty(); q.pop()) {
			int current = q.front();
			if (vis[current]) continue;
			vis[current] = true;
			keys.insert(r[current]);
			for (auto child : mp[r[current]]) {
				q.push(child);
			}
			tot[i]++;
			for (auto [child, key] : adj[current]) {
				if (vis[child]) continue;
				if (keys.contains(key)) {
					q.push(child);
				} else {
					mp[key].push_back(child);
				}
			}
		}
	}
	
	int smallest = 1000000000;
	for (int i = 0; i < r.size(); i++) {
		if (tot[i] == 0) tot[i]++;
		smallest = min(smallest, tot[i]);
	}
	vector<int> ans(r.size(), 0);
	for (int i = 0; i < r.size(); i++) {
		if (tot[i] == smallest) {
			ans[i] = 1;
		}
	}
	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... |