#include<bits/stdc++.h>
using namespace std;
const int N = 300010;
vector <int> g[N], gc[N];
int typ[N];
int mark[N];
vector <int> kosaraju;
struct DSU{
int pai[N], sz[N];
DSU(){
for(int i = 0;i < N;i++){
pai[i] = i;
sz[i] = 1;
}
}
int find(int x){
return (pai[x] = (x == pai[x] ? x : find(pai[x])));
}
void join(int a, int b){
a = find(a);
b = find(b);
if(a == b) return;
if(sz[a] > sz[b]) swap(a, b);
pai[a] = b;
sz[b] += sz[a];
typ[b] |= typ[a];
}
} dsu;
void dfs2(int v, int rep){
dsu.join(v, rep);
mark[v] = 1;
for(auto x : gc[v]){
if(mark[x]) continue;
dfs2(x, rep);
}
return;
}
void dfs(int v){
mark[v] = 1;
for(auto x : g[v]){
if(mark[x]) continue;
dfs(x);
}
kosaraju.push_back(v);
}
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();
for(int i = 0;i < n;i++){
typ[i] = (1<<r[i]);
}
int m = u.size();
for(int cnt = 0;cnt < 32;cnt++){
for(int i = 0;i < n;i++){
g[i].clear();
mark[i] = 0;
}
kosaraju.clear();
for(int i = 0;i < m;i++){
if(dsu.find(u[i]) == dsu.find(v[i])) continue;
if((typ[dsu.find(u[i])]&(1<<c[i]))){
g[dsu.find(u[i])].push_back(dsu.find(v[i]));
gc[dsu.find(v[i])].push_back(dsu.find(u[i]));
}
if((typ[dsu.find(v[i])]&(1<<c[i]))){
g[dsu.find(v[i])].push_back(dsu.find(u[i]));
gc[dsu.find(u[i])].push_back(dsu.find(v[i]));
}
}
for(int i = 0;i < n;i++){
int v = dsu.find(i);
if(mark[v]) continue;
dfs(v);
}
for(int i = 0;i < n;i++){
mark[i] = 0;
}
while(!kosaraju.empty()){
int v = kosaraju.back();
kosaraju.pop_back();
if(mark[v]) continue;
dfs2(v, v);
}
}
int tam = n;
for(int i = 0;i < n;i++){
if(g[dsu.find(i)].empty()) tam = min(tam, dsu.sz[dsu.find(i)]);
}
vector <int> ans;
for(int i = 0;i < n;i++){
if(tam == dsu.sz[dsu.find(i)] and g[dsu.find(i)].empty()) ans.push_back(1);
else ans.push_back(0);
}
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... |