This documentation is automatically generated by online-judge-tools/verification-helper
#define PROBLEM "https://judge.yosupo.jp/problem/unionfind"
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <numeric>
#include <bitset>
#include <cmath>
static const int MOD = 1000000007;
using ll = long long;
using uint = uint32_t;
using namespace std;
template<class T> constexpr T INF = ::numeric_limits<T>::max()/32*15+208;
#include "../datastructure/unionfind.cpp"
int main() {
int n, q;
cin >> n >> q;
UnionFind uf(n);
for (int i = 0; i < q; ++i) {
int t, u, v;
scanf("%d %d %d", &t, &u, &v);
if(t) printf("%d\n", uf.same(u, v));
else uf.unite(u, v);
}
return 0;
}
#line 1 "test/yosupo_unionfind.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/unionfind"
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <numeric>
#include <bitset>
#include <cmath>
static const int MOD = 1000000007;
using ll = long long;
using uint = uint32_t;
using namespace std;
template<class T> constexpr T INF = ::numeric_limits<T>::max()/32*15+208;
#line 1 "datastructure/unionfind.cpp"
class UnionFind {
int n;
vector<int> uni;
int forest_size;
public:
explicit UnionFind(int n) : n(n), uni(static_cast<uint>(n), -1), forest_size(n) {};
int root(int a){
if (uni[a] < 0) return a;
else return (uni[a] = root(uni[a]));
}
bool unite(int a, int b) {
a = root(a);
b = root(b);
if(a == b) return false;
if(uni[a] > uni[b]) swap(a, b);
uni[a] += uni[b];
uni[b] = a;
forest_size--;
return true;
}
int size(){ return forest_size; }
int size(int i){ return -uni[root(i)]; }
bool same(int a, int b) { return root(a) == root(b); }
};
/**
* @brief UnionFind(素集合データ構造)
* @docs _md/unionfind.md
*/
#line 22 "test/yosupo_unionfind.test.cpp"
int main() {
int n, q;
cin >> n >> q;
UnionFind uf(n);
for (int i = 0; i < q; ++i) {
int t, u, v;
scanf("%d %d %d", &t, &u, &v);
if(t) printf("%d\n", uf.same(u, v));
else uf.unite(u, v);
}
return 0;
}