This documentation is automatically generated by online-judge-tools/verification-helper
#define PROBLEM "https://judge.yosupo.jp/problem/unionfind"
#include "../../code/dataStructures/DSU.cc"
int main() {
cin.tie(0);
ios_base::sync_with_stdio(0);
int n, q;
cin >> n >> q;
DSU dsu(n);
while(q--) {
int a, b ,c;
cin >> a >> b >> c;
if(!a) {
dsu.join(b, c);
} else {
cout << dsu.sameSet(b, c) << endl;
}
}
}
#line 1 "tests/yosupo/unionfind.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/unionfind"
#line 1 "code/template.cc"
// this line is here for a reason
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<vi> vvi;
typedef vector<vii> vvii;
#define fi first
#define se second
#define eb emplace_back
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define endl '\n'
#define ALL(x) (x).begin(), (x).end()
#define RALL(x) (x).rbegin(), (x).rend()
#define SZ(x) (int)(x).size()
#define FOR(a, b, c) for (auto a = (b); (a) < (c); ++(a))
#define F0R(a, b) FOR (a, 0, (b))
template <typename T>
bool ckmin(T& a, const T& b) { return a > b ? a = b, true : false; }
template <typename T>
bool ckmax(T& a, const T& b) { return a < b ? a = b, true : false; }
#ifndef DEBUG
#define DEBUG 0
#endif
#define dout if (DEBUG) cerr
#define dvar(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
#line 2 "code/dataStructures/DSU.cc"
struct DSU {
DSU(int size) : msize(size), data(size, -1) {}
bool sameSet(int a, int b) { return find(a) == find(b); }
int find(int x) {
return data[x] < 0 ? x : data[x] = find(data[x]);
}
bool join(int a, int b) {
a = find(a), b = find(b);
if (a == b) return false;
if (data[a] > data[b]) swap(a, b);
data[a] += data[b], data[b] = a;
return --msize, true;
}
int size() { return msize; }
int size(int a) { return -data[find(a)]; }
int msize;
vi data;
};
#line 4 "tests/yosupo/unionfind.test.cpp"
int main() {
cin.tie(0);
ios_base::sync_with_stdio(0);
int n, q;
cin >> n >> q;
DSU dsu(n);
while(q--) {
int a, b ,c;
cin >> a >> b >> c;
if(!a) {
dsu.join(b, c);
} else {
cout << dsu.sameSet(b, c) << endl;
}
}
}