并查集函数模板写法:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define MAX_N 1000int par[MAX_N]; //par[i]表示i节点的父节点
int rank[MAX_N]; // 树的高度 //初始化n个元素
void init(int n){for(int i = 0;i < n; i++){par[i] = i;rank[i] = 0;}
} //查询包含x节点的树的根
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);
}int main(){return 0;
} 

并查集类模板写法:

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]++ ;}}
};

转载于:https://www.cnblogs.com/zhangjiuding/p/7710721.html

【模板】并查集 两种路径压缩写法(类模板和函数模板)相关推荐

  1. java : enum、创建文件和文件夹、删除文件和文件夹、获得项目绝对路径、写入数据到excel中、java代码中两种路径符号写法、读取、写入text文件...

    java : enum http://www.cnblogs.com/hyl8218/p/5088287.html 创建文件和文件夹.删除文件和文件夹 http://www.cnblogs.com/m ...

  2. 并查集 rank排序+路径压缩

    有两个优化点: rank排序 记录两个合并的根的rank rank低的合并到rank高的上 这个优化目的是避免树的深度增加 路径压缩 parent[p] = parent[parent[p]] 这行代 ...

  3. Python中的两种路径

    Java中有两种路径,一种是操作系统的路径path,另一种是类路径classpath. Python中也是如此,一种是操作系统环境变量中的path,另一种是PYTHONPATH. 当import xx ...

  4. iOS开发笔记-两种单例模式的写法

    iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h"st ...

  5. ACM模板——并查集

    #define _for(i,a,b) for(int i = (a);i < (b);i ++) const int maxn = 50003; int par[maxn]; //父亲 int ...

  6. POJ1417 True Liars ——种类并查集+01背包+路径** 好题

    ​​​​​​POJ1417 题意: 有n行输入形如x, y, str,str为yes表示x说y是天使,str为no表示x说y不是天使(x, y为天使,恶魔的编号,1<=x,y<=p+q): ...

  7. hdu1181变形课dfs/bfs/并查集三种解法(java)

    题目链接 Problem Description 呃-变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...

  8. iOS:图片上传时两种图片压缩方式的比较

    上传图片不全面的想法:把图片保存到本地,然后把图片的路径上传到服务器,最后又由服务器把路径返回,这种方式不具有扩展性,如果用户换了手机,那么新手机的沙盒中就没有服务器返回的图片路径了,此时就无法获取之 ...

  9. 并查集模板——并查集(洛谷 P3367)

    题目选自洛谷P3367 是并查集的最入门的题目,也是并查集的模板题~~ 如果你还不知道并查集是什么? 请看我的这篇文章 点击链接 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作. 输入格式 ...

最新文章

  1. 【Python】Pandas数据挖掘与分析时的常用方法
  2. VTK:PolyData之FitSplineToCutterOutput
  3. stl中Priority Queues(优先队列)的基本用法
  4. 华为宣布今年将投入2亿美元推动鲲鹏计算产业发展
  5. 使用 JS刷新框架子页面
  6. php遗漏,PHP被遗漏的执行函数
  7. 计算机软件知识pdf,[计算机软件及应用]PDF基础知识.doc
  8. 手机端html本地存储,HTML5 web storage本地存储
  9. Angr安装与使用之使用篇(二)
  10. 三星手机服务器无影响,终于找到手机网速慢的原因了!原来有这么多讲究
  11. 查看变量内存的python内置函数是_这68个Python内置函数,建议你吃透
  12. 【TensorFlow】DNNRegressor 的简单使用
  13. Git 工具(写的很乱)
  14. 自定义注解,实现jpa查询,使用起来很方便,记录一下
  15. c++语言解一元二次方程,C++ 求解一元二次方程
  16. Nature neuroscience:神经脆弱性作为癫痫发作区脑电图标志物
  17. C语言 文件合成器代码(用图片掩盖.rar文件)
  18. 如何在SQL中实现排序间接
  19. webpack4.x的学习
  20. 阿里巴巴收购网易考拉,定了!

热门文章

  1. C#中split的用法
  2. 2021年2月Harmonyos时候上线,华为HarmonyOS系统将于4月上线 MateX2首批升级
  3. oracle sql 表个数,【oracleSQL】查看当前用户各个表的记录数
  4. js oop写法小例子
  5. spring json
  6. 实现JavaScript继承
  7. 《剑指offer》数组中只出现一次的数字
  8. 深度学习笔记:卷积神经网络的Tensorflow实现
  9. 并发工具类(一)等待多线程完成的CountDownLatch
  10. javaweb学习总结(五):Servlet开发(一)