并查集简单实现

来源:互联网 发布:数据统计问题有哪些 编辑:程序博客网 时间:2024/05/19 19:56
const int maxn = 50010;int root[maxn];//父亲int rank[maxn];//数的高度int n;//初始化n个元素void init(){    for(int i = 0; i < n; i++){        root[i] = i;        rank[i] = 0;    }}//查询树的根int find(int x){    if(root[x] = x) return x;    return root[x] = find(root[x]);}//合并x和y所属的集合void unit(int x, int y){    x = find(x);    y = find(y);    if(x == y) return;    if(rank[x] < rank[y]){        root[x] = y;    }else{        root[y] = x;        if(rank[x] == rank[y])            rank[x]++;    }}//判断x和y是否属于同一个集合bool same(int x, int y){    return find(x) == find(y);}
原创粉丝点击