#include <bits/stdc++.h>
#define forsn(i, s, n) for (int i = int(s); i < int(n); i++)
#define forn(i, n) forsn(i, 0, n)
#define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--)
#define dforn(i, n) dforsn(i, 0, n)
#define sz(x) int(x.size())
#define all(x) begin(x), end(x)
#define pb push_back
#define eb emplace_back
#define fst first
#define snd second
using namespace std;
using vi = vector<int>;
using ii = pair<int, int>;
using ll = long long;
const int MAX_N = 3e5 + 9;
int cmp[MAX_N];
vector<ii> adj[MAX_N];
int R[MAX_N];
int keys[MAX_N], t = 1;
vi blocked[MAX_N];
int visited[MAX_N];
int find(int u) {
if (cmp[u] == u) return u;
return cmp[u] = find(cmp[u]);
}
vi bfs(int start) {
queue<int> q;
q.push(start), visited[start] = t;
vi toClear, reached;
while (!q.empty()) {
int u = q.front();
q.pop();
reached.pb(u);
if (find(u) != start) {
break;
}
if (keys[R[u]] < t) {
keys[R[u]] = t;
for (int v : blocked[R[u]]) if (visited[v] < t) {
q.push(v), visited[v] = t;
}
}
for (auto [v, c] : adj[u]) if (visited[v] < t) {
if (keys[c] == t) q.push(v), visited[v] = t;
else blocked[c].pb(v), toClear.pb(c);
}
}
for (int c : toClear) blocked[c].clear();
return reached;
}
vi find_reachable(vi r, vi u, vi v, vi c) {
int n = sz(r), m = sz(u);
forn(i, n) cmp[i] = i, R[i] = r[i];
forn(i, m) adj[u[i]].eb(v[i], c[i]), adj[v[i]].eb(u[i], c[i]);
bool flag = true;
while (flag) {
vector<vi> cmps;
forn(i, n) if (find(i) == i) {
cmps.pb(bfs(i)), t++;
}
vector<vi> connections(n);
vi deg(n);
vector<ii> toJoin;
for (auto &nodes : cmps) {
int x = nodes.front(), y = nodes.back();
if (find(y) != x) toJoin.eb(x, y);
}
flag = !toJoin.empty();
for (auto [x, y] : toJoin) {
cmp[find(x)] = find(y);
}
}
vector<vi> reached(n);
int minReacheable = n;
forn(i, n) if (i == find(i)) {
reached[i] = bfs(i); t++;
minReacheable = min(minReacheable, sz(reached[i]));
}
vi a(n, 0);
forn(i, n) if (sz(reached[i]) == minReacheable) {
for (int j : reached[i]) a[j] = 1;
}
return a;
}
# | 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... |