#include "keys.h"
#include <bits/stdc++.h>
using namespace std;
#define vec vector
#define arr array
#define pii pair<int, int>
#define fir first
#define sec second
#define hset unordered_set
#define hmap unordered_map
const int N = 3e5 + 5, INF = 1e9;
// Zero indexing
int n;
arr<int, N> cl;
arr<vec<pii>, N> adj;
// arr<bool, N> vs;
// arr<vec<int>, N> ngh;
// set<int> cls;
// vec<int> ord;
// void cnt_cmp(int st) {
// vs.fill(false), ngh.fill({}), cls.clear(), ord.clear();
// vs[st] = true, ord.push_back(st);
// while (ord.size()) {
// int u = ord.back(); ord.pop_back();
// for (pii x : adj[u]) {
// if (cls.count(x.sec)) {
// if (vs[x.fir]) continue;
// vs[x.fir] = true;
// ord.push_back(x.fir);
// } else {
// ngh[x.sec].push_back(x.fir);
// }
// }
// if (cls.count(cl[u])) continue;
// cls.insert(cl[u]);
// for (int v : ngh[cl[u]]) {
// if (vs[v]) continue;
// vs[v] = true;
// ord.push_back(v);
// }
// }
// }
hset<int> vs;
set<int> cls;
hmap<int, vec<int>> ngh;
vec<int> ord;
void cmp(int st) {
vs.clear(), cls.clear(), ngh.clear(), ord.clear();
vs.insert(st), ord.push_back(st);
while (ord.size()) {
int u = ord.back(); ord.pop_back();
for (pii x : adj[u]) {
int v = x.fir, c = x.sec;
if (cls.count(c)) {
if (vs.count(v)) continue;
vs.insert(v), ord.push_back(v);
} else {
ngh[c].push_back(v);
}
}
if (cls.count(cl[u])) return;
cls.insert(cl[u]);
for (int v : ngh[cl[u]]) {
if (vs.count(v)) continue;
vs.insert(v), ord.push_back(v);
}
}
}
arr<int, N> cnt;
void cnt_cmp() {
for (int u = 0; u < n; u++) {
cmp(u);
cnt[u] = vs.size();
}
}
vec<int> find_reachable(vec<int> _cl, vec<int> _u, vec<int> _v, vec<int> _c) {
n = _cl.size();
for (int u = 0; u < n; u++) cl[u] = _cl[u];
for (int i = 0; i < _u.size(); i++) {
int u = _u[i], v = _v[i], c = _c[i];
adj[u].push_back({v, c});
adj[v].push_back({u, c});
}
cnt_cmp();
vec<int> ans(n);
int mn = *min_element(cnt.begin(), cnt.begin() + n);
for (int u = 0; u < n; u++)
if (cnt[u] == mn) ans[u] = 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... |