【模板】并查集 两种路径压缩写法
2017-10-23 00:26
417 查看
class UnionFind{ private: int* parent; int* rank; int count; public: UnionFind(int count){ parent = new int[count]; rank = new int[count]; this->count = count; for(int i = 0;i < count; i++){ parent[i] = i; rank[i] = 1; } } ~UnionFind(){ delete[] parent; delete[] rank; } int find(int p){ assert(p >= 0&&p < count); /* while(parent[p] != p){ parent[p] = parent[parent[p]]; p = parent[p]; }*/ // 实践更好 if(p != parent[p]) //理论更好 parent[p] = find(parent[p]); return parent[p]; } bool isConnected(int p,int q){ return find(p) == find(q); } void unionElements(int p,int q){ int pRoot = find(p); int qRoot = find(q); if(pRoot == qRoot) return; if(rank[pRoot] < rank[qRoot]){ parent[pRoot] = qRoot; }else if(rank[pRoot] > rank[qRoot]){ parent[qRoot] = pRoot; }else{ parent[pRoot] = qRoot; rank[qRoot]++ ; } } };
相关文章推荐
- 【模板】并查集 压缩路径
- 【模板】【数据结构】并查集(路径压缩+按秩合并)
- hdu 1213 How Many Tables 并查集模板题+路径压缩
- Disjointset 并查集(按秩合并,与路径压缩)的模板
- 并查集的两种优化(按秩合并,路径压缩)
- 并查集模板[路径压缩]
- 并查集讲解(按秩合并与路径压缩),模板与典型例题
- poj 1182 食物链(数据结构:并查集+路径压缩)
- 加权路径压缩并查集实现
- 并查集算法和路径压缩
- 并查集及并查集的路径压缩
- 并查集 路径压缩
- C语言 并查集 压缩路径
- 【数轴染色+并查集路径压缩+加速】数轴染色
- 杭电3635————并查集的应用(路径压缩)
- UVA 1329 Corporative Network(并查集:路径压缩)
- [HDOJ3635]Dragon Balls(并查集,路径压缩)
- 数据结构实现之并查集(使用按秩合并和路径压缩)
- 并查集,battles over cities,路径压缩,优化与封装,无向图连通性
- 并查集 路径压缩