This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
/*struct component {
int root;
set<int> keys;
void init(int u, int c) {
root = u;
keys.insert(c);
}
};*/
vector<int> find_reachable(vector<int> c, vector<int> u, vector<int> v, vector<int> r) {
int n = c.size();
int m = u.size();
vector<vector<pair<int, int>>> g(n);
for (int i = 0; i < m; i++) {
g[u[i]].emplace_back(v[i], r[i]);
g[v[i]].emplace_back(u[i], r[i]);
}
vector<set<int>> keys(n);
vector<vector<int>> ch(n);
vector<int> id(n);
for (int i = 0; i < n; i++) {
//comp[i].init(i, c[i]);
keys[i].insert(c[i]);
ch[i] = {i};
id[i] = i;
}
vector<int> ans(n, 1e9);
function<void(int, int)> Merge = [&](int u, int v) {
if (ans[id[v]] != 1e9) {
return;
}
for (int i : keys[u]) {
keys[v].insert(i);
}
keys[u].clear();
for (int i : ch[u]) {
ch[v].push_back(i);
id[i] = v;
}
ch[u].clear();
};
for (int foo = 0; foo < 30; foo++) {
vector<bool> mrg(n, false);
vector<bool> was(n, false);
vector<vector<int>> mp(n);
vector<bool> have(n, false);
for (int i = 0; i < n; i++) {
if (mrg[id[i]] || ans[id[i]] != 1e9) {
continue;
}
int other = -1;
vector<int> vis, v;
mp.clear();
function<void(int)> Dfs = [&](int u) {
if (id[u] != id[i]) {
other = u;
return;
}
if (other != -1 || was[u]) {
return;
}
vis.push_back(u);
was[u] = true;
v.push_back(c[u]);
have[c[u]] = true;
for (auto x : mp[c[u]]) {
Dfs(x);
if (other != -1) {
return;
}
}
mp[c[u]].clear();
for (auto e : g[u]) {
if (have[e.second]) {
Dfs(e.first);
if (other != -1) {
return;
}
} else {
mp[e.second].push_back(e.first);
}
}
};
Dfs(id[i]);
for (int x : v) {
have[x] = false;
}
if (other == -1) {
for (int u : vis) {
ans[u] = vis.size();
}
} else {
Merge(id[i], id[other]);
mrg[id[i]] = true;
//mrg[id[other]] = true;
}
}
}
int mn = *min_element(ans.begin(), ans.end());
for (int i = 0; i < n; i++) {
ans[i] = (ans[i] == mn ? 1 : 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... |