并查集总结

来源:互联网 发布:java 数组长度限制 编辑:程序博客网 时间:2024/06/05 12:01

并查集是一种管理元素分组的数据结构,是使用树形结构实现的

作用:

   1、查询元素a,b是否属于同一组

   2、合并元素a,b所在的组(只能进行合并,无法进行分割)

注意:

   为避免退化发生,需进行以下操作:

       1、对于每棵树,记录数的高度rank

       2、合并时如果两棵树的rank不同,从rank小的向rank大的连边

   通过find可以路径压缩,使并查集更加高效。



并查集的实现:



int par[200005];//父亲int rank[200005];//数的高度void init(int n)//初始化{    for (int i = 0; i < n; i++)    {        par[i] = i;        rank[i] = 0;    }}int find(int x)//查询树的根,并实现路径压缩{    if (par[x] == x)        return x;    else        return par[x] = find(par[x]);}void unite(int x, int y)//合并x,y所在的集合{    x = find(x);    y = find(y);    if (x == y)        return ;    if (rank[x] < rank[y])        par[x] = y;    else    {        par[y] = x;        if (rank[x] == rank[y])            rank[x]++;    }}bool same(int x, int y)//判断x,y是否属于同一集合{    return find(x) == find(y);}


原创粉丝点击