并查集

并查集

并查集是一种维护集合的数据结构,它的名字中并、查、集三个字分别取自合并(Union),查找(Find),集合(Set).也就是说,并查集支持下面两个操作:

  1. 合并
  2. 查找

那么并查集是用什么实现的呢?其实就是一个数组;

int father[MAXN];

其中father[i]表示i的父亲节点

初始化

一开始每个元素都是一个独立的集合,因此需要令所有father[i]=i;

void init(int *father, int n) {
    for (int i = 0; i < n; ++i) {
        father[i] = i;
    }
}

查找(路径压缩)

 

int findFather(int x) {
    if (x == father[x])
        return x;  // x就是根节点
    else {
        int F = findFather(x);
        father[x] = F;// 路径压缩
        return F;
    }
}

合并

int Union(int a, int b) {
    int Fa = findFather(a), Fb = findFather(b);
    if (Fa != Fb) father[Fb] = Fa;
}

 

posted @ 2020-10-21 21:58  tao10203  阅读(78)  评论(0)    收藏  举报