#include <vector>
#include <map>
#include <iostream>
using namespace std;
//#define dout if(1==1)cout
#define pb push_back
#define mp make_pair
/*
AAARRGGHHHH
*/
vector<int> keys(2005, 0);
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, 1);
if(n>2000 || m>2000)return ans;
vector<vector<int>> adj(n);
vector<vector<int>> keyr(n);
for(int i=0; i<m; i++){
adj[u[i]].pb(v[i]);
keyr[u[i]].pb(c[i]);
adj[v[i]].pb(u[i]);
keyr[v[i]].pb(c[i]);
}
// vector<int> reach(n);
map<int, vector<int>> keys;
vector<bool> visitted, keys_owned;
vector<int> p(n, -1);
vector<int> neighbours;
int n_visitted, prev_n_visitted;
int curnode;
for(int t=0; t<n; t++){
cerr<<"\t\tt="<<t<<"\n";
// init..
keys.clear();
visitted = vector<bool>(2005, 0);
keys_owned = vector<bool>(2005, 0);
keys_owned[r[t]]=1;
visitted[t]=1;
for(int i=0; i<adj[t].size(); i++){
// cycle through initial paths
keys[keyr[t][i]].pb(adj[t][i]);
}
n_visitted=1;
prev_n_visitted=0;
// ...
cerr<<"keys.size() -> "<<keys.size()<<"\n";
bool progress=true;
while(progress){
cerr<<"#";
progress=false;
//prev_n_visitted = n_visitted;
for(auto it=keys.begin(); it!=keys.end(); it++){
// [for every] keys that would be useful...
if((it->second).size()==0)continue;
if(keys_owned[it->first]){
neighbours.clear();
for(auto e:it->second){
neighbours.pb(e);
}
(it->second).clear();
progress=true;
for(int v=0; v<(neighbours.size()); v++){
if(visitted[neighbours[v]]) continue;
// new UNVISITTED node!
visitted[neighbours[v]]=1;
curnode = neighbours[v];
cerr<<"we can visit "<<curnode<<"\n";
n_visitted++;
keys_owned[r[curnode]]=1;
for(int e=0; e<adj[curnode].size(); e++){
if(!visitted[adj[curnode][e]]){
keys[keyr[curnode][e]].pb(adj[curnode][e]);
}
}
}
}
}
}
p[t] = n_visitted;
}
int smol=p[0];
for(int i=1; i<n; i++){
smol = min(smol, p[i]);
}
ans = vector<int>(n, 0);
for(int i=0; i<n; i++){
ans[i] = (p[i]==smol);
}
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... |