This documentation is automatically generated by competitive-verifier/competitive-verifier
#define PROBLEM "https://judge.yosupo.jp/problem/unionfind"
#include <bits/stdc++.h>
using namespace std;
#include "graph/dsu.hpp"
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n, q;
cin >> n >> q;
DSU dsu(n);
while (q--) {
int t, u, v;
cin >> t >> u >> v;
if (t == 0) {
dsu.merge(u, v);
} else {
cout << dsu.same(u, v) << "\n";
}
}
}
#line 1 "test/yosupo/ds/unionfind.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/unionfind"
#include <bits/stdc++.h>
using namespace std;
#line 2 "graph/dsu.hpp"
struct DSU {
vector<int> data;
DSU() : DSU(0) {}
DSU(int n) : data(n, -1) {}
void reset(int n) {
if (data.size() < n) data.resize(n);
fill_n(begin(data), n, -1);
}
int size(int x) { return -data[find(x)]; }
int find(int x) { return data[x] < 0 ? x : data[x] = find(data[x]); }
bool same(int x, int y) { return find(x) == find(y); }
bool merge(int x, int y) {
return merge(x, y, [](auto...) {});
}
template<class F> bool merge(int x, int y, F &&f) {
x = find(x), y = find(y);
if (x == y) return false;
if (data[x] > data[y]) swap(x, y);
data[x] += exchange(data[y], x);
f(x, y);
return true;
}
};
#line 7 "test/yosupo/ds/unionfind.test.cpp"
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n, q;
cin >> n >> q;
DSU dsu(n);
while (q--) {
int t, u, v;
cin >> t >> u >> v;
if (t == 0) {
dsu.merge(u, v);
} else {
cout << dsu.same(u, v) << "\n";
}
}
}
| Env | Name | Status | Elapsed | Memory |
|---|---|---|---|---|
| g++ | example_00 |
|
5 ms | 4 MB |
| g++ | max_random_00 |
|
42 ms | 4 MB |
| g++ | max_random_01 |
|
44 ms | 4 MB |
| g++ | max_random_02 |
|
40 ms | 4 MB |
| g++ | path_00 |
|
37 ms | 4 MB |
| g++ | path_01 |
|
37 ms | 4 MB |
| g++ | path_02 |
|
36 ms | 4 MB |
| g++ | path_03 |
|
36 ms | 4 MB |
| g++ | random_00 |
|
33 ms | 4 MB |
| g++ | random_01 |
|
33 ms | 4 MB |
| g++ | random_02 |
|
27 ms | 4 MB |
| g++ | random_03 |
|
10 ms | 4 MB |
| g++ | random_04 |
|
22 ms | 4 MB |
| g++ | random_05 |
|
30 ms | 4 MB |
| g++ | random_06 |
|
26 ms | 4 MB |
| g++ | random_07 |
|
7 ms | 4 MB |
| g++ | random_08 |
|
13 ms | 4 MB |
| g++ | random_09 |
|
41 ms | 4 MB |
| clang++ | example_00 |
|
5 ms | 4 MB |
| clang++ | max_random_00 |
|
43 ms | 4 MB |
| clang++ | max_random_01 |
|
45 ms | 4 MB |
| clang++ | max_random_02 |
|
40 ms | 4 MB |
| clang++ | path_00 |
|
37 ms | 4 MB |
| clang++ | path_01 |
|
38 ms | 4 MB |
| clang++ | path_02 |
|
37 ms | 4 MB |
| clang++ | path_03 |
|
36 ms | 4 MB |
| clang++ | random_00 |
|
33 ms | 4 MB |
| clang++ | random_01 |
|
33 ms | 4 MB |
| clang++ | random_02 |
|
27 ms | 4 MB |
| clang++ | random_03 |
|
10 ms | 4 MB |
| clang++ | random_04 |
|
22 ms | 4 MB |
| clang++ | random_05 |
|
30 ms | 4 MB |
| clang++ | random_06 |
|
26 ms | 4 MB |
| clang++ | random_07 |
|
8 ms | 4 MB |
| clang++ | random_08 |
|
13 ms | 4 MB |
| clang++ | random_09 |
|
41 ms | 4 MB |