本文实例讲述了C++并查集亲戚(Relations)算法。分享给大家供大家参考。具体分析如下:

题目: 亲戚(Relations)

或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥的表姐的孙子。如果能得到完整的家谱,判断两个人是否亲戚应该是可行的,但如果两个人的最近公共祖先与他们相隔好几代,使得家谱十分庞大,那么检验亲戚关系实非人力所能及.在这种情况下,最好的帮手就是计算机。

为了将问题简化,你将得到一些亲戚关系的信息,如同Marry和Tom是亲戚,Tom和B en是亲戚,等等。从这些信息中,你可以推出Marry和Ben是亲戚。请写一个程序,对于我们的关心的亲戚关系的提问,以最快的速度给出答案。

参考输入输出格式 输入由两部分组成。

第一部分以N,M开始。N为问题涉及的人的个数(1 ≤ N ≤ 20000)。这些人的编号为1,2,3,…,N。下面有M行(1 ≤ M ≤ 1000000),每行有两个数ai, bi,表示已知ai和bi是亲戚.

第二部分以Q开始。以下Q行有Q个询问(1 ≤ Q ≤ 1 000 000),每行为ci, di,表示询问ci和di是否为亲戚。

对于每个询问ci, di,若ci和di为亲戚,则输出Yes,否则输出No。

样例输入与输出

输入

10 7

2 4

5 7

1 3

8 9

1 2

5 6

2 3

3

3 4

7 10

8 9

输出

Yes

No

Yes

如果这道题目不用并查集,而只用链表或数组来存储集合,那么效率很低,肯定超时。

代码如下:

#include

#include

using namespace std;

int father[20010]; //father[i]表示i的父亲

int Find(int a) //查找其父亲并压缩路径

{

if(father[a] != a)

father[a] = Find(father[a]);

return father[a];

}

int main()

{

int N,M;

int a,b;

scanf("%d%d",&N,&M);

//给每个元素建立一个集合

for(int i = 1 ; i <= N ; ++i)

father[i] = i;

//合并

for(int i = 0 ; i < M ; ++i)

{

scanf("%d%d",&a,&b);

a = Find(a);

b = Find(b);

father[a] = b;

}

//查询

scanf("%d",&M);

while(M--)

{

scanf("%d%d",&a,&b);

a = Find(a);

b = Find(b);

if(a == b)

printf("YES\n");

else

printf("NO\n");

}

return 0;

}

希望本文所述对大家的C++程序设计有所帮助。

亲戚关系关系算法java程序_C++并查集亲戚(Relations)算法实例相关推荐

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

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

  2. c ibatis mysql实例_[Java教程]java程序中的ibatis连接mySql的基本实例

    [Java教程]java程序中的ibatis连接mySql的基本实例 0 2015-03-16 00:01:32 属性文件:SqlMap.properties1 driver=com.mysql.jd ...

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

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

  4. 并查集与贪心算法的应用之求解无向图的最小生成树

    一,介绍 本文介绍使用Kruskal算法求解无向图的最小生成树.Kruskal是一个贪心算法,并且使用了并查集这种数据结构. 关于并查集的介绍,参考:数据结构--并查集的原理及实现 二,构造一个无向图 ...

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

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

  6. 基于并查集的kruskal算法

    #include <iostream> //并查集的kruskal算法using namespace std;const int max_ve=1005,max_ed=15005;int ...

  7. java 获取邮编_基于JAVA的根据地名查邮编api调用代码实例

    代码描述:基于JAVA的根据地名查邮编api调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/66 1.[代码][Java]代码 import java.io.Bu ...

  8. Java程序员面试笔试宝典-数据结构与算法(四)

    本文内容基于<Java程序员面试笔试宝典>,何昊.薛鹏.叶向阳著. 1. 链表 1.1 如何实现单链表的增删操作? 1.2 如何从链表中删除重复元素? 1.3 如何找出单链表中的倒数第k个 ...

  9. java堆算法,Java 基本功04-JVM-Java堆详解和GC算法

    JVM GC 机制 1. 在此之前需要了解相关概念: 1.1 Java 堆内存: 在 HotSpot JVM 实现中 Heap 内存被"分代"管理. JVM 的内存首先被分割成两部 ...

最新文章

  1. 如何使用Springboot开发实现一个物业管理系统
  2. HBase性能优化方法总结(三):读表操作
  3. 什么是 constructor signature in interface
  4. java初学者应该怎么学?
  5. android 短信位置,浅析Android手机卫士之手机实现短信指令获取位置
  6. 凝胶成像文件行业调研报告 - 市场现状分析与发展前景预测
  7. C++11 static_assert
  8. 人工智能火灾报警器_使用AI进行准确的火灾预测
  9. 诺基亚n9用linux软件,Nokia N9 卸载国行N9自带的第三方软件
  10. 自定义加载等待动画,仿金山词霸
  11. bzoj4199 [Noi2015]品酒大会
  12. HTV-VIVE 连接 PC端 720云
  13. python建筑案例_有哪些关于 Python 在建筑中的应用和教程?
  14. 采访座谈快速出稿利器——讯飞智能录音笔SR502
  15. FreeRTOSMini
  16. 《区块链技术与应用》北大肖臻老师——课程笔记【21-23】
  17. ppt 里插入html,如何在PPT中插入html网页.ppt
  18. Oracle 12c以下版本RAC与Redhat Linux的avahi-daemon服务的水火不容
  19. 递归、回溯-图的m着色问题
  20. 9.png 自带工具 ps 两种修改方式

热门文章

  1. 现代控制理论公式大赏
  2. 使用RX方式模拟DoubanFm的登陆
  3. java3d翻转纪念相册_抖音上很火的3D立体动态相册实现代码!
  4. 简单调用百度api实现车型识别
  5. slqdbx mysql_sqldbx下载 v4.3 附sqldbx使用教程
  6. python模拟上传图片_用python创建自己的等离子图片模拟
  7. windows7计算机测试,WinSAT 测试在 Windows 7 中失败
  8. 一个阿里前端工程师的成长之路
  9. class与subclass分析
  10. IDEA springboot 项目启动报错 Shorten the command line via JAR manifest or via a classpath file and rerun