并查集——基本操作

并查集(Disjoint-Set)是一种可以维护若干个不重叠的集合。它的基本操作有两个:

GET 查询一个元素属于哪个集合

MERGE 合并两个集合成为一个集合,就是将其中一个父结点指向另一个父结点

在查询的过程中,我们可以利用回溯顺便将路径中所有元素指向父结点,这个操作称为路径压缩

模板:

int fa[SIZE];


int get(int x){
    if(x == fa[x]) return x;
    else return fa[x] = get(fa[x]); //路径压缩
}


void merge(int x, int y){
    fa[get(x)] = get(y);
    return;
}
原文地址:https://www.cnblogs.com/hnoi/p/11070348.html