并查集模板
2018-01-27 20:11
211 查看
我的模板最适合我,不知道适不适合浏览本篇博客的各位。如果有觉得好的地方,可以取走;不好的地方看看就好。
下面是我的模板:
转载请注明出处:http://blog.csdn.net/dillonh/article/details/79182854
下面是我的模板:
//并查集模板 //头文件&&预处理(适合窝自己的) #include <set> #include <cstdio> #include <algorithm> using namespace std; //变量的声明 //我一般都会有fa[Max](父亲),r[Max](树的高度)这两个数组 //对每个元素进行初始化 void init(int n){ for(int i=0; i<n; i++){ fa[i]=i; r[i]=0; } } //查询树的根 int fi(int x){ return fa[x]==x?x:fa[x]=fi(fa[x]); //将一棵树上的所有元素直接连在根上 } //合并两个集合 void unite(int x,int y){ int p1=fi(x),p2=fi(y); if(p1==p2) return; //根都一样当然就不用继续进行操作啦== if(r[p1]>r[p2]) fa[p2]=p1; //将树的高度较小的连在树高的上 else{ fa[p1]=p2; if(r[p1]==r[p2]) r[p2]++; //此处画个图就懂了 } } //判断两个元素是否在同一个集合里面只需判断它们的根是不是一样的就行了 bool check(int x,int y){ return fi(x)==fi(y); } //主函数 int main(){ /* 巴拉巴拉的一堆输入,同时将一系列需要的函数进行调用== */ //如果需要判断有多少个集合的话,我都是用set来进行处理的,前面定义一个set就用s吧 for(int i=1;i<=N;i++){ if(!s.count(fi(i))){ s.insert(fi(i)); } } //集合数=s.size(); } //具体的看我的迷之并查集分类里面的题== //emmmm,上一句纯属帮其他几篇博客拉浏览量
转载请注明出处:http://blog.csdn.net/dillonh/article/details/79182854
相关文章推荐
- 并查集模板
- 【20171108】Luogu P3367 模板题:并查集
- 【模板】并查集
- POJ 2524 宗教信仰 并查集 基础模板
- 普通并查集模板
- HDU 1232 并查集模板题
- nyist 608 并查集模板
- {模板}并查集...
- 洛谷 P3367 【模板】并查集
- 并查集之找祖先的模板
- 并查集模板
- SDUTOJ [2801] 并查集模板
- 【数据结构】【并查集模板】
- Hdu 1232 畅通工程(并查集模板题)
- 并查集(——模板习题与总结)
- 【HDU 1213】How many tables(并查集模板)
- 【bzoj1455】【罗马游戏】左偏树+并查集(模板)
- 并查集模板
- 并查集模板
- hdu 1863(畅通工程)(简单的并查集,模板)