亲戚关系关系算法java程序_C++并查集亲戚(Relations)算法实例
本文实例讲述了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)算法实例相关推荐
- Java程序员面试题集(131-135)
Java程序员面试题集(131-135) 摘要:这部分内容准备重新发布为Java程序员面试题集(151-180),但这篇帖子仍然保留在这里.查看新内容请点击Java程序员面试题集(151-180) 1 ...
- c ibatis mysql实例_[Java教程]java程序中的ibatis连接mySql的基本实例
[Java教程]java程序中的ibatis连接mySql的基本实例 0 2015-03-16 00:01:32 属性文件:SqlMap.properties1 driver=com.mysql.jd ...
- 算法:程序设计之并查集
前言 之前一直都是听说并查集,感觉是一个神乎其技,狂拽酷炫.却没有想过在自己学习并查集之前,自已在解决问题的时候也能够想到一个和并查集异曲同工的方法.这个还是很愉快的. 版权说明 著作权归作者所有. ...
- 并查集与贪心算法的应用之求解无向图的最小生成树
一,介绍 本文介绍使用Kruskal算法求解无向图的最小生成树.Kruskal是一个贪心算法,并且使用了并查集这种数据结构. 关于并查集的介绍,参考:数据结构--并查集的原理及实现 二,构造一个无向图 ...
- 第一个算法项目 | JS实现并查集迷宫算法Demo学习
0 参考链接 并查集,不就一并和一查? 520,花了一夜给女朋友写了个走迷宫游戏 点击下载并查集迷宫算法JS代码 1 JS代码修改运行方法 首先下载的文件夹如下: 双击打开maze.html文件. 键 ...
- 基于并查集的kruskal算法
#include <iostream> //并查集的kruskal算法using namespace std;const int max_ve=1005,max_ed=15005;int ...
- java 获取邮编_基于JAVA的根据地名查邮编api调用代码实例
代码描述:基于JAVA的根据地名查邮编api调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/66 1.[代码][Java]代码 import java.io.Bu ...
- Java程序员面试笔试宝典-数据结构与算法(四)
本文内容基于<Java程序员面试笔试宝典>,何昊.薛鹏.叶向阳著. 1. 链表 1.1 如何实现单链表的增删操作? 1.2 如何从链表中删除重复元素? 1.3 如何找出单链表中的倒数第k个 ...
- java堆算法,Java 基本功04-JVM-Java堆详解和GC算法
JVM GC 机制 1. 在此之前需要了解相关概念: 1.1 Java 堆内存: 在 HotSpot JVM 实现中 Heap 内存被"分代"管理. JVM 的内存首先被分割成两部 ...
最新文章
- 如何使用Springboot开发实现一个物业管理系统
- HBase性能优化方法总结(三):读表操作
- 什么是 constructor signature in interface
- java初学者应该怎么学?
- android 短信位置,浅析Android手机卫士之手机实现短信指令获取位置
- 凝胶成像文件行业调研报告 - 市场现状分析与发展前景预测
- C++11 static_assert
- 人工智能火灾报警器_使用AI进行准确的火灾预测
- 诺基亚n9用linux软件,Nokia N9 卸载国行N9自带的第三方软件
- 自定义加载等待动画,仿金山词霸
- bzoj4199 [Noi2015]品酒大会
- HTV-VIVE 连接 PC端 720云
- python建筑案例_有哪些关于 Python 在建筑中的应用和教程?
- 采访座谈快速出稿利器——讯飞智能录音笔SR502
- FreeRTOSMini
- 《区块链技术与应用》北大肖臻老师——课程笔记【21-23】
- ppt 里插入html,如何在PPT中插入html网页.ppt
- Oracle 12c以下版本RAC与Redhat Linux的avahi-daemon服务的水火不容
- 递归、回溯-图的m着色问题
- 9.png 自带工具 ps 两种修改方式
热门文章
- 现代控制理论公式大赏
- 使用RX方式模拟DoubanFm的登陆
- java3d翻转纪念相册_抖音上很火的3D立体动态相册实现代码!
- 简单调用百度api实现车型识别
- slqdbx mysql_sqldbx下载 v4.3 附sqldbx使用教程
- python模拟上传图片_用python创建自己的等离子图片模拟
- windows7计算机测试,WinSAT 测试在 Windows 7 中失败
- 一个阿里前端工程师的成长之路
- class与subclass分析
- IDEA springboot 项目启动报错 Shorten the command line via JAR manifest or via a classpath file and rerun