#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[a]]=1;
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 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... |