This documentation is automatically generated by online-judge-tools/verification-helper
#include "datastructure/union-find-tree.hpp"
/**
* @title Union-Find
*/
#include <vector>
class UnionFind {
public:
std::vector<int> data; // sizeとparを同時に管理する
UnionFind(int size) : data(size, -1) {}
int find(int x) { return data[x] < 0 ? x : data[x] = find(data[x]); }
void unite(int x, int y) {
int px = find(x);
int py = find(y);
if (px != py) {
if (data[py] < data[px]) std::swap(px, py);
data[px] += data[py]; data[py] = px;
}
}
bool same(int x, int y) { return find(x) == find(y); }
int size(int x) { return -data[find(x)]; }
};
#line 1 "datastructure/union-find-tree.hpp"
/**
* @title Union-Find
*/
#include <vector>
class UnionFind {
public:
std::vector<int> data; // sizeとparを同時に管理する
UnionFind(int size) : data(size, -1) {}
int find(int x) { return data[x] < 0 ? x : data[x] = find(data[x]); }
void unite(int x, int y) {
int px = find(x);
int py = find(y);
if (px != py) {
if (data[py] < data[px]) std::swap(px, py);
data[px] += data[py]; data[py] = px;
}
}
bool same(int x, int y) { return find(x) == find(y); }
int size(int x) { return -data[find(x)]; }
};