并查集三种Java代码实现
@代码模板
package Algorithm;public class UF {private int[] id;//连通分量的idprivate int count;public UF(int n){//初始化n个触点count=n;id=new int[n];for (int i = 0; i < n; i++) {id[i]=i;//初始化时,每个触点都是一个单独的分量}}public int getCount(){//得到分量数return count;}public boolean connected(int p,int q){//判断触点p,q是否连通return find(q)==find(p);}public int find(int p){//找到触点p所在的分量id}public void union(int p,int q){//合并触点p,q}
}
实现find和union即可。
1.用循环将一个分量中的触点全部改变
public int find(int p){return id[p];}public void union(int p,int q){int pID=find(p);int qID=find(q);if(pID==qID) return;for (int i = 0; i < id.length; i++) {if(id[i]==pID) id[i]=qID;}count--;}
2. 链接法
public int find(int p){while (p!=id[p]) p=id[p];return p;}public void union(int p,int q){int pID=find(p);int qID=find(q);if(pID==qID) return;id[pID]=qID;count--;}
就两个分量,id=[1, 1, 1, 8, 3, 0, 5, 1, 8, 8]。比如下标4的是3,那么说明下标4链接到下标3,在8这个分量里面。
3. 加权树
private int[] sz;//保存树的高度,初始化都为1
public int find(int p){while (p!=id[p]) p=id[p];return p;}public void union(int p,int q){int pID=find(p);int qID=find(q);if(pID==qID) return;if(sz[pID]<sz[qID]){//小树加到大树上面sz[qID]+=sz[pID];id[pID]=qID;}else{sz[pID]+=sz[qID];id[qID]=pID;}count--;}
路径压缩
private int find(int p){if(p==id[p]) return p;return id[p]=find(id[p]);
}
并查集三种Java代码实现相关推荐
- hdu1181变形课dfs/bfs/并查集三种解法(java)
题目链接 Problem Description 呃-变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...
- hdu dfs入门java_hdu1181变形课dfs/bfs/并查集三种解法(java)
题目链接 Problem Description 呃-变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...
- HDU-3974 Assign the task 线段树 或 直接模拟多叉树 或 并查集 (三种方法)
题目大意 t 组数据(t<=10),每组第一行一个 n 表示 n 个员工(n<=5e4),接下来 n-1 行,每行两个整数 u,v 表示 v 是 u 的上司 然后一行 m 表示有 m 个操 ...
- L2-026 小字辈——BFS DFS 并查集-三种方法
输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) -- 简单起见,我们把家族成员从 1 到 N 编号.随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的 ...
- java jar 打印_三种Java打印PDF文档的实例代码
以下内容归纳了通过Java程序打印PDF文档时的3种情形.即: 1 静默打印 2 显示打印对话框打印 3 打印PDF时自定义纸张大小 使用工具:Spire.PDF for Java Jar文件获取及导 ...
- java 代码块的作用_4种Java代码块的作用讲解
4种Java代码块的作用讲解 时间:2017-06-28 来源:华清远见JAVA学院 今天华清Java学院小编要和大家分享的是Java代码块的作用,代码块是一种常见的代码形式,他用大括号&qu ...
- 蓝桥杯 并查集汇总学习 及其代码
蓝桥杯 并查集汇总学习 及其代码 这里记录一下在刷蓝桥杯的并查集的题时写的一些代码 蓝桥幼儿园 蓝桥幼儿园 :https://www.lanqiao.cn/problems/1135/learning ...
- ML:文本、图像等数值化数据相似度计算之余弦相似度计算三种python代码实现
ML:文本.图像等数值化数据相似度计算之余弦相似度计算三种python代码实现 目录 相似度计算之余弦相似度计算 输出结果 三种python代码实现
- python如何删除代码_Python列表删除的三种方法代码分享
1.使用del语句删除元素 >>> i1 = ["a",'b','c','d'] >>> del i1[0] >>> prin ...
最新文章
- 详解PHP实现定时任务的五种方法
- Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤
- vue 圆形百分比进度条_快速构建一个圆形的进度条
- Python-OpenCV 笔记2 -- 图像的基本属性和操作
- OpenGL pipeline (very important)
- U-boot中TFTP 解释
- jep使用_JEP 277“增强弃用”非常好。 但这是一个更好的选择
- python命令行参数传递_Python中 命令行参数传递 与 处理
- 坑:pytest 运行报错unknown hook 'pytest_namespace' in plugin module 'allure.pytest_plugin'
- 烂泥:ubuntu中使用virt-manager图形化新建虚拟机
- java JDBC 连接数据库查询数据与直接使用sql的疑问
- 【Clickhosue】MySQL 没有主键导致CK不可用 The db.scene cannot be materialized, because there is no primary keys
- 如何在XenDesktop中映射USB设备
- 空间配置器(allocator)
- stm单片机的后缀含义
- C# 计算农历日期方法
- 「缠师课后回复精选」第14课: 喝茅台的高潮程序!
- crucible3.x +fisheye3.x 安装和破解
- PS 移动工具和复制
- php 极光短信发送 api