This documentation is automatically generated by online-judge-tools/verification-helper
struct UnionFind{
vector<int> par;
int count;
UnionFind(int n) : par(n, -1), count(0){}
int Find(int x){return par[x] < 0 ? x : Find(par[x]);}
int Size(int x){return par[x] < 0 ? -par[x] : Size(par[x]);}
bool Unite(int x, int y){
x = Find(x);
y = Find(y);
if(x == y)
return false;
if(par[x] > par[y])
swap(x, y);
par[x] += par[y];
par[y] = x;
return ++count;
}
};#line 1 "lib/classes/unionfind.cpp"
struct UnionFind{
vector<int> par;
int count;
UnionFind(int n) : par(n, -1), count(0){}
int Find(int x){return par[x] < 0 ? x : Find(par[x]);}
int Size(int x){return par[x] < 0 ? -par[x] : Size(par[x]);}
bool Unite(int x, int y){
x = Find(x);
y = Find(y);
if(x == y)
return false;
if(par[x] > par[y])
swap(x, y);
par[x] += par[y];
par[y] = x;
return ++count;
}
};