并查集

来源:互联网 发布:汉唐自远 知乎 编辑:程序博客网 时间:2024/06/08 12:12

我转过一篇写的很棒的并查集算法详解

地址:http://blog.csdn.net/a2459956664/article/details/50614096

int par[maxn]  //父亲int rank[maxn]  //树的高度//初始化n个元素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]);    }}//合并x和y所属的集合void unite(int x, int 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]++;    }}//判断x和y是否属于同一个集合bool same(int x, int y){    return find(x) == find(y);}


0 0
原创粉丝点击