并查集主要可以用于道路是否连同等一些图问题:
//查
int find(vector<int> &uf, int x) {
if (uf[x] == x) {
return x;
}
return uf[x] = find(uf, uf[x]);//路径压缩
}
//并
void merge(vector<int> &uf, int x, int y) {
x = find(uf, x);
y = find(uf, y);
uf[y] = x;
}
vector<int> uf(n);
iota(uf.begin(), uf.end(), 0);//赋初值,每个元素都在单独的一个只含根节点的树中