#include "keys.h"
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define dd(x) cout<<#x<<" is "<<x<<endl;
#define dl(x) cout<<#x<<" is "; for(auto i:x) cout<<i<<' '; cout<<endl;
typedef pair<int,int> pii;
vector<pii> adj[205];
int obtained[205]; //key
int unlocked[205]; //path
int vis[205]; //node
int numreached[205]; //node;
set<int>s;
void dfs(int x, vector<int> &r){
	for(auto [v,id]: adj[x]){
		if(!unlocked[id]) continue;
		if(vis[v]) continue;
		vis[v] = 1;
		if(!obtained[r[v]]) s.insert(r[v]);
		dfs(v,r);
	}
}
std::vector<int> find_reachable(std::vector<int> r, std::vector<int> u, std::vector<int> v, std::vector<int> c) {
	
	int n = r.size(), m = c.size();
	vector<int> ans;
	
	for(int i=0; i<m; i++){
		int a = u[i], b = v[i];
		adj[a].pb({b,i});
		adj[b].pb({a,i});
	}
	
	for(int i=0; i<n; i++){
		s = set<int>();
		s.insert(r[i]);
		memset(obtained,0,sizeof(obtained));
		memset(unlocked,0,sizeof(unlocked));
		
		while(!s.empty()){
			for(auto key: s){
				obtained[key] = 1;
				for(int j=0; j<m; j++){
					if(c[j] == key) unlocked[j] = 1;
				}
			}
			s = set<int>();
			
			memset(vis,0,sizeof(vis));
			//dl(vis)
			vis[i] = 1;
			dfs(i,r);
		}
		
		
		for(int j=0; j<n; j++) if(vis[j]) numreached[i]++;
		
	}
	
	int x = *min_element(numreached, numreached+n);
	
	for(int i=0; i<n; i++) {
		if(numreached[i] == x) ans.pb(1);
		else ans.pb(0);
	}
	
	//for(int i=0; i<n; i++) cout<<numreached[i]<<' ';
	//cout<<endl;
	
	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... |