@代码模板

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代码实现相关推荐

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

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

  2. hdu dfs入门java_hdu1181变形课dfs/bfs/并查集三种解法(java)

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

  3. HDU-3974 Assign the task 线段树 或 直接模拟多叉树 或 并查集 (三种方法)

    题目大意 t 组数据(t<=10),每组第一行一个 n 表示 n 个员工(n<=5e4),接下来 n-1 行,每行两个整数 u,v 表示 v 是 u 的上司 然后一行 m 表示有 m 个操 ...

  4. L2-026 小字辈——BFS DFS 并查集-三种方法

    输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) -- 简单起见,我们把家族成员从 1 到 N 编号.随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的 ...

  5. java jar 打印_三种Java打印PDF文档的实例代码

    以下内容归纳了通过Java程序打印PDF文档时的3种情形.即: 1 静默打印 2 显示打印对话框打印 3 打印PDF时自定义纸张大小 使用工具:Spire.PDF for Java Jar文件获取及导 ...

  6. java 代码块的作用_4种Java代码块的作用讲解

    4种Java代码块的作用讲解 时间:2017-06-28     来源:华清远见JAVA学院 今天华清Java学院小编要和大家分享的是Java代码块的作用,代码块是一种常见的代码形式,他用大括号&qu ...

  7. 蓝桥杯 并查集汇总学习 及其代码

    蓝桥杯 并查集汇总学习 及其代码 这里记录一下在刷蓝桥杯的并查集的题时写的一些代码 蓝桥幼儿园 蓝桥幼儿园 :https://www.lanqiao.cn/problems/1135/learning ...

  8. ML:文本、图像等数值化数据相似度计算之余弦相似度计算三种python代码实现

    ML:文本.图像等数值化数据相似度计算之余弦相似度计算三种python代码实现 目录 相似度计算之余弦相似度计算 输出结果 三种python代码实现

  9. python如何删除代码_Python列表删除的三种方法代码分享

    1.使用del语句删除元素 >>> i1 = ["a",'b','c','d'] >>> del i1[0] >>> prin ...

最新文章

  1. 详解PHP实现定时任务的五种方法
  2. Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤
  3. vue 圆形百分比进度条_快速构建一个圆形的进度条
  4. Python-OpenCV 笔记2 -- 图像的基本属性和操作
  5. OpenGL pipeline (very important)
  6. U-boot中TFTP 解释
  7. jep使用_JEP 277“增强弃用”非常好。 但这是一个更好的选择
  8. python命令行参数传递_Python中 命令行参数传递 与 处理
  9. 坑:pytest 运行报错unknown hook 'pytest_namespace' in plugin module 'allure.pytest_plugin'
  10. 烂泥:ubuntu中使用virt-manager图形化新建虚拟机
  11. java JDBC 连接数据库查询数据与直接使用sql的疑问
  12. 【Clickhosue】MySQL 没有主键导致CK不可用 The db.scene cannot be materialized, because there is no primary keys
  13. 如何在XenDesktop中映射USB设备
  14. 空间配置器(allocator)
  15. stm单片机的后缀含义
  16. C# 计算农历日期方法
  17. 「缠师课后回复精选」第14课: 喝茅台的高潮程序!
  18. crucible3.x +fisheye3.x 安装和破解
  19. PS 移动工具和复制
  20. php 极光短信发送 api

热门文章

  1. 高翔Slambook第七讲代码解读(2d-2d位姿估计)
  2. Mysql 根据一个表数据更新另外一个表
  3. 【Linux】备份与压缩命令命令
  4. 【React 实战教程】从0到1 构建 github star管理工具
  5. 用Genymotion来调试android应用
  6. /dev/urandom
  7. 【Git 第2课】 GitHub是什么?
  8. 在PHP中实现StringBuilder类
  9. 在Android使用新浪微博的开发平台API
  10. Linux下如何实现用户的集中管理(NIS服务器的高级配置)