树:并查集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树:并查集相关的知识,希望对你有一定的参考价值。

      在学习最小生成树的两种算法前,先学下并查集。

      并查集的思想是,对于一个集合,使用集合中的一个顶点作为特殊点集合里所有的点都与此特殊点直接相连;而并查集的查询,就相当于查询两个两个顶点是否为同一个父亲,这也是findSet(x)里之所以有fa[x]==x时,fa[x]=x的原因。

并查集之查询、合并 模板如下:

int fa[30010];

void makeSet(int n) //初始化,n个元素,处于单独集合
{
    for(int i=0;i<n;i++)
        fa[i]=i;
}

int findSet(int x) //找到点x的父亲,递归
{
    return fa[x]=fa[x]==x?x:findSet(fa[x]);
}

void unionSet(int x,int y) //把父亲相同的合并成同一个集合
{
    int a=findSet(x),b=findSet(y);
    if(a!=b)
        fa[b]=a;
    //路径压缩;即在查询的时候,修改fa值
}

以上是关于树:并查集的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 1140F 线段树 分治 并查集

bzoj2733 [ HNOI2012 ] -- 并查集+线段树合并

树:并查集

1863 畅通工程-并查集最小生成树

UVALive 4730 线段树+并查集

并查集