#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef pair<int,int> pii;
const int MAXN = 3e5+5;
int N, M, P[MAXN];
int vis[MAXN], key[MAXN], emp[MAXN], day;
vector <int> K, ans, now, all, cut[MAXN];
vector <pii> cand, adj[MAXN];
int find(int x) {
if (P[x] == x) {
return x;
}
return P[x] = find(P[x]);
}
void join(int x,int y) {
x = find(x);
y = find(y);
if (x != y) {
P[x] = y;
}
}
int bfs(int x,bool t) {
queue <int> Q;
Q.push(x);
vis[x] = day;
while (!Q.empty()) {
int y = Q.front();
Q.pop();
if (find(x) != find(y)) {
return y;
}
if (t) {
now.push_back(y);
}
if (key[K[y]] != day && emp[K[y]] == day) {
for (int z : cut[K[y]]) {
if (vis[z] == day) continue;
Q.push(z);
vis[z] = day;
}
}
key[K[y]] = day;
for (pii z : adj[y]) {
if (vis[z.fi] == day) continue;
if (key[z.se] == day) {
Q.push(z.fi);
vis[z.fi] = day;
}
else {
if (emp[z.se] != day) {
emp[z.se] = day;
cut[z.se].clear();
}
cut[z.se].push_back(z.fi);
}
}
}
return -1;
}
vector<int> find_reachable(vector<int> r,vector<int> u,vector<int> v,vector<int> c) {
N = r.size();
K = r;
ans = vector<int>(N);
for (int i=0;i<(int)c.size();i++) {
adj[u[i]].push_back({v[i],c[i]});
adj[v[i]].push_back({u[i],c[i]});
}
for (int i=0;i<N;i++) {
P[i] = i;
}
do {
cand.clear();
for (int i=0;i<N;i++) {
if (find(i) == i) {
day++;
int x = bfs(i,0);
if (x != -1) {
cand.push_back({i,x});
}
}
}
for (pii x : cand) {
join(x.fi,x.se);
}
}
while (!cand.empty());
M = N+1;
for (int i=0;i<N;i++) {
if (find(i) == i) {
now.clear();
day++;
bfs(i,1);
if ((int)now.size() < M) {
M = now.size();
all.clear();
}
if ((int)now.size() == M) {
for (int x : now) {
all.push_back(x);
}
}
}
}
for (int x : all) {
ans[x] = 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... |