This documentation is automatically generated by online-judge-tools/verification-helper
#define PROBLEM "https://judge.yosupo.jp/problem/unionfind"
#include "../../src/UnionFind.hpp"
#include <iostream>
#include <iomanip>
using namespace std;
struct init {
init() {
cin.tie(nullptr); ios::sync_with_stdio(false);
cout << fixed << setprecision(10);
}
} init_;
int main() {
int N, Q;
cin >> N >> Q;
UnionFind uf(N);
for (int i = 0; i < Q; i++) {
int t, u, v;
cin >> t >> u >> v;
if (t == 0) uf.unify(u, v);
else cout << uf.is_same(u, v) << "\n";
}
return 0;
}
#line 1 "test/yosupo/unionfind.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/unionfind"
#line 2 "src/UnionFind.hpp"
#include <vector>
using namespace std;
class UnionFind {
public:
explicit UnionFind(int size) : data(size, -1) {}
[[nodiscard]] int root(int x) { return data[x] < 0 ? x : data[x] = root(data[x]); }
[[nodiscard]] bool is_same(int x, int y) { return root(x) == root(y); }
[[nodiscard]] int size(int x) { return -data[root(x)]; }
bool unify(int x, int y) {
x = root(x);
y = root(y);
if (x != y) {
if (data[y] < data[x]) swap(x, y);
data[x] += data[y];
data[y] = x;
return true;
}
return false;
}
private:
vector<int> data;
};
#line 5 "test/yosupo/unionfind.test.cpp"
#include <iostream>
#include <iomanip>
using namespace std;
struct init {
init() {
cin.tie(nullptr); ios::sync_with_stdio(false);
cout << fixed << setprecision(10);
}
} init_;
int main() {
int N, Q;
cin >> N >> Q;
UnionFind uf(N);
for (int i = 0; i < Q; i++) {
int t, u, v;
cin >> t >> u >> v;
if (t == 0) uf.unify(u, v);
else cout << uf.is_same(u, v) << "\n";
}
return 0;
}