并查集的实现

it2022-05-05  135

我们用编号代表每个元素。数组par表示的是父亲的编号,par[x] = x时,x是所在的树的根

int par[MAX_N]; //父亲 int rank[MAX_N]; //树的高度 //初始化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]++; } }

并查集之平行宇宙,poj1703


最新回复(0)