并查集

2020-11-10  本文已影响0人  华雨欣

用途

并查集包含合并、查询两种操作,可以接近O(1)的复杂度判断两个元素是否属于同一个集合,通常在最小生成树、查看两个元素是否属于同一个集合(图的连通)、合并集合、集合个数(图的连通分量个数)中均有使用。

模板

int[] p;//并查集

int find(int x){
    if(x != p[x]) p[x] = find(p[x]);
    return p[x];
}

void union(int x, int y){
    int px = find(x), py = find(y);
    p[px] = py;
}

当然还有带权并查集、秩优化等等,就根据题目适当变通即可。
另:个人习惯将合并方法直接拿出来写在调用的位置; 在初始化时 p[i] = i;

上一篇 下一篇

猜你喜欢

热点阅读