并查集

一、什么是并查集

什么是并查集?字面意思把一堆东西    合并   、   查找

二、并查集讲解前置知识点

1.可以把并查集的实现理解为在合并几棵树

2.需要用到fa数组,fa[i]表示i的父节点的编号,如果为i则i为祖宗节点

三、查找

这个部分要实现找到k的祖宗节点,那么很简单只要在开头判断自己是否是祖宗节点,是,返回自己的值,不是,继续往上找直到找到祖宗节点为止

int find(int k)
{
    if(fa[k]==k) return k;
    else return find(fa[k]);
}

四、合并

要把a合并到b很简单只要fa[a]=b就可以了(要注意不返回值的函数一定要是void类型)

void b(int a,int b)
{
    fa[a]=b;
}

五、路径压缩

一般的并查集是这样的

 

 那我们不妨每次连接a b时,连接他们的祖宗,那么find的复杂度将会缩小,就会变成这样

 

 并的程序:

void b(int a,int b)
{
    fa[find(a)]=find(b);
}

 

posted @ 2023-02-10 22:24  王浩泽  阅读(36)  评论(0编辑  收藏  举报