并查集

本文章仅供作者复习代码,不提供教程(要说教程,小的真的不会啊),所以有小伙伴勿入请火速离开,以免寻砖砍死作者造成不必要的麻烦。



并查集的实现:

int par[MAX_N]; //父亲
int height[MAX_N];//树的高度


//初始化n个元素

void init(int n){
    for(int i=0; i<n; i++){
        par[i] = i; //将每个初始化的点的父亲设置为自己本身即代表该点为孤立的点
        height[i] = 0;//初始化时,每个点的高度均为0
    }
}

//查询树的根节点,并且在查询过程中,进行路径压缩

int find(int x){
    if(par[x] == x){
        return x;//如果x是孤立的点,那么它的根节点就是它本身
    }else{
        return par[x] = find(x); // 递归找x的根节点,找到之后,x的父节点直接设置为根节点
    }
}

//合并两个节点
void unite(int x,int y){
    x = find(x);
    y = find(y);
    if(x == y)return;//如果两点本来就连通,则返回。

    if(height[x]<height[y]){
        par[x] = y;     //如果x的树的高度比y的小,则把x附在y上
    }else{
        par[y] = x;
        if(height[x] == height[y])height[x]++; //如果两者高度相同的话,把么合并后,高度必增长1
    }
}


//判断x,y是否属于同一集合


bool same(int x, int y){return find(x) == find(y);}



阅读更多
版权声明:虽然为本人原创,但是写得真是渣,想转就转,反正我也不是鸣人。 https://blog.csdn.net/u011372705/article/details/49892765
文章标签: 并查集
个人分类: ACM
上一篇AVL树
下一篇hdu1232 并查集
想对作者说点什么? 我来说一句

acm的数据结构内容

2010年04月23日 408KB 下载

并查集模板

2018年06月24日 1KB 下载

朱全民-并查集ppt

2009年07月25日 103KB 下载

并查集初步

2012年12月01日 386KB 下载

没有更多推荐了,返回首页

关闭
关闭