This documentation is automatically generated by online-judge-tools/verification-helper
/**
* @brief UnionFind
* @docs docs/UnionFind.md
*/
struct UnionFind {
vector<int> data; // sizes of sets
UnionFind(int sz) : data(sz, -1) {}
bool unite(int x, int y) {
x = find(x), y = find(y);
if (x == y) return false;
if (data[x] > data[y]) swap(x, y);
data[x] += data[y];
data[y] = x;
return true;
}
int find(int k) {
if (data[k] < 0) return k;
return data[k] = find(data[k]);
}
int size(int k) { return (-data[find(k)]); }
bool same(int x, int y) { return find(x) == find(y); }
};#line 1 "library/structure/UnionFind/UnionFind.cpp"
/**
* @brief UnionFind
* @docs docs/UnionFind.md
*/
struct UnionFind {
vector<int> data; // sizes of sets
UnionFind(int sz) : data(sz, -1) {}
bool unite(int x, int y) {
x = find(x), y = find(y);
if (x == y) return false;
if (data[x] > data[y]) swap(x, y);
data[x] += data[y];
data[y] = x;
return true;
}
int find(int k) {
if (data[k] < 0) return k;
return data[k] = find(data[k]);
}
int size(int k) { return (-data[find(k)]); }
bool same(int x, int y) { return find(x) == find(y); }
};