首页 > 其他 > 详细

树:并查集

时间:2016-02-02 17:32:42      阅读:215      评论:0      收藏:0      [点我收藏+]

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

      并查集的思想是,对于一个集合,使用集合中的一个顶点作为特殊点集合里所有的点都与此特殊点直接相连;而并查集的查询,就相当于查询两个两个顶点是否为同一个父亲,这也是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值
}

树:并查集

原文:http://www.cnblogs.com/atmacmer/p/5177902.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!