并查集:互不相交的集合

并查集的3种操作:

(1)Make_Set()

把每一个元素初始化为一个集合,初始化后的每一个元素的父节点是它本身

(2)Find_Set(int x)

查找一个元素所在的集合,关键在于寻找这个元素所在集合的祖先

(3)Union(int x, int y)

合并x和y所在的集合,一个集合的祖先指向另一个集合的祖先

题目:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。先输入10个人(编号从1-10)及7组亲戚关系,然后输入3组数据,问这三组数据是不是亲戚关系?

输入10 72 45 71 38 91 25 62 333 47 108 9输出YesNoYes

package com.java.study;

import java.util.Scanner;

public class UnionColl {

int [] father;

int [] rank;

public UnionColl(){}

private void Make_Set(){

for(int i = 0 ; i < father.length ; i++){

father[i] = i;//根据实际情况指定的父节点可变化

rank[i] = 0;//根据实际情况初始化秩也有所变化

}

}

private int Find_Set(int x){

if(x!=father[x]){

father[x] = Find_Set(father[x]);//将查找路径的所有节点都指向根节点

}

return father[x];

}

void Union(int x, int y){

int f1 = Find_Set(x);

int f2 = Find_Set(y);

if(f1!=f2){

father[f1] = f2;

}

}

public void go(){

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

int m = sc.nextInt();

father = new int[n+1];

rank = new int[n+1];

Make_Set();

for(int i = 1; i <= m; i++){

int a = sc.nextInt();

int b = sc.nextInt();

int x = Find_Set(a);

int y = Find_Set(b);

Union(x,y);

}

int k = sc.nextInt();

for(int i = 1 ; i <= k ;i++){

int x = sc.nextInt();

int y = sc.nextInt();

if(Find_Set(x)==Find_Set(y))

System.out.println("Yes");

else

System.out.println("No");

}

}

public static void main(String[] args) {

UnionColl uc = new UnionColl();

uc.go();

}

}

亲戚关系关系算法java程序_并查集1——查找亲戚关系相关推荐

  1. 亲戚关系关系算法java程序_C++并查集亲戚(Relations)算法实例

    本文实例讲述了C++并查集亲戚(Relations)算法.分享给大家供大家参考.具体分析如下: 题目: 亲戚(Relations) 或许你并不知道,你的某个朋友是你的亲戚.他可能是你的曾祖父的外公的女 ...

  2. 亲戚关系关系算法java程序_亲戚换算(亲戚称谓计算器)

    由于常年不在家,相信很多人在过年时候碰到眼熟的亲戚都不知道该怎么称呼了. 瞌睡有人送枕头,过年期间还真有人开发了一款"三姑六婆"亲戚称呼计算器,解了大家. 爸爸妈妈那一辈的哥哥,姐 ...

  3. 亲戚关系关系算法java程序_亲戚称呼计算器java代码

    展开全部 计算器java代码62616964757a686964616fe58685e5aeb931333337386663import java.awt.BorderLayout; import j ...

  4. 第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++

    第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++ 准备代码: 第一次编译: 显然需要先配置环境变量: 先找到java.exe和javac.exe所在的文件夹位置: 此电脑-& ...

  5. Java程序员面试题集(131-135)

    Java程序员面试题集(131-135) 摘要:这部分内容准备重新发布为Java程序员面试题集(151-180),但这篇帖子仍然保留在这里.查看新内容请点击Java程序员面试题集(151-180) 1 ...

  6. 算法:程序设计之并查集

    前言 之前一直都是听说并查集,感觉是一个神乎其技,狂拽酷炫.却没有想过在自己学习并查集之前,自已在解决问题的时候也能够想到一个和并查集异曲同工的方法.这个还是很愉快的. 版权说明 著作权归作者所有. ...

  7. 第一个算法项目 | JS实现并查集迷宫算法Demo学习

    0 参考链接 并查集,不就一并和一查? 520,花了一夜给女朋友写了个走迷宫游戏 点击下载并查集迷宫算法JS代码 1 JS代码修改运行方法 首先下载的文件夹如下: 双击打开maze.html文件. 键 ...

  8. BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集

    BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集 Description     农夫约翰有N(2≤N≤40000)个农场,标号1到N,M( ...

  9. pat上写java程序_如何运行Java程序和设置CLASSPAT

    导读: 如何运行JAVA和CLASSPATH环境变量的设置是学习和使用JAVA中最基本的问题,本不应在此赘述.但近来不少人在论坛上提出的问题却与此有关,我平时碰到的一些初学者也往往在这个问题上卡了壳, ...

  10. UML设计java程序_利用UML序列图设计Java应用程序详解

    [IT168 技术文章] Java应用程序由许多类所构成,是Java实现面向对象应用程序的核心.类图主要描述Java应用程序中各种类之间的相互静态关系,如类的继承.抽象.接口以及各种关联.要利用UML ...

最新文章

  1. Original error was: DLL load failed: 找不到指定的模块。--解决办法
  2. 小游戏_猜数_JAVA
  3. GDCM:gdcm::UIComp的测试程序
  4. 解决开机POST提示Strike tne F1 key to continue,F2 to run the setup utility
  5. 容器为何物,为什么它对OpenStack很重要?
  6. sqlserver 字符串转化数值函数_Excel常见函数用法(TEXT函数)
  7. 【华为云技术分享】干货!!卷积神经网络之LeNet-5迁移实践案例
  8. oracle的dbcp工具类,DBCP数据源的使用
  9. rk3399_android7.1耳机拔插ADC检测
  10. 如何在IDEA中搭建SpringMVC?
  11. 自动发卡平台网站源码-带手机版 带多套商户模板
  12. iPad最新型笔刷,足足五种分类,几百款
  13. matlab画三维图像(plot3,mesh,surf)
  14. 测试质量保障体系的建立
  15. 用Java实现24点游戏
  16. 计算机动画原理课程设计选题,组成原理课程设计设计一台模型计算机.pdf
  17. 设计模式——仲裁模式
  18. python 字符串转字典的几种方法
  19. Python爬虫监控(邮件和钉钉)
  20. 设计原则 单一职责原则、开放封闭原则、依赖倒置原则、里氏代换原则、迪米特法则

热门文章

  1. Prolog编程求解图搜索问题
  2. HITB 2020:二进制漏洞挖掘仍是会议主流方向
  3. pc安装android,在电脑上安装安卓的过程
  4. win10 Administrator账户被禁用怎么办?
  5. C++第2周项目2——读取数据到结构体数组
  6. 搜狗收录提交入口-搜狗网站批量提交方法
  7. Kotlin学习笔记八-数据代理类型,接口与抽象类
  8. 带左右箭头的图片滚动html,js实现图片上显示左右箭头类似翻页效果的代码
  9. 积分极限定理+勒贝格控制收敛定理+高数
  10. manjaro设置字体_Manjaro 20.03字体美化的2.5个级别