This documentation is automatically generated by online-judge-tools/verification-helper
#include "union_find/union_find.hpp"
#ifndef UNION_FIND_HPP
#define UNION_FIND_HPP
#include <utility>
#include <vector>
//===
struct UnionFind {
std::vector<int> parent;
UnionFind() = default;
UnionFind(int nmemb) {
init(nmemb);
};
void init(int nmemb) {
parent.clear();
parent.resize(nmemb, -1);
};
int represent(int x) {
if (parent[x] < 0) return x;
return parent[x] = represent(parent[x]);
};
void unite(int x, int y) {
x = represent(x);
y = represent(y);
if (x == y) return;
if (parent[y] < parent[x]) std::swap(x, y);
parent[x] += parent[y];
parent[y] = x;
return;
};
bool same(int x, int y) {
return represent(x) == represent(y);
};
int size(int x) {
return -(parent[represent(x)]);
};
};
//===
#endif
#line 1 "union_find/union_find.hpp"
#include <utility>
#include <vector>
//===
struct UnionFind {
std::vector<int> parent;
UnionFind() = default;
UnionFind(int nmemb) {
init(nmemb);
};
void init(int nmemb) {
parent.clear();
parent.resize(nmemb, -1);
};
int represent(int x) {
if (parent[x] < 0) return x;
return parent[x] = represent(parent[x]);
};
void unite(int x, int y) {
x = represent(x);
y = represent(y);
if (x == y) return;
if (parent[y] < parent[x]) std::swap(x, y);
parent[x] += parent[y];
parent[y] = x;
return;
};
bool same(int x, int y) {
return represent(x) == represent(y);
};
int size(int x) {
return -(parent[represent(x)]);
};
};
//===