Problem Z: 亲戚*

Description
或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整的家谱,判断两个人是否亲戚应该是可行的,但如果两个人的最近公共祖先与他们相隔好几代,使得家谱十分庞大,那么检验亲戚关系实非人力所能及。在这种情况下,最好的帮手就是计算机。为了将问题简化,你将得到一些亲戚关系的信息,如Marry和Tom是亲戚,Tom和Ben是亲戚,等等。从这些信息中,你可以推出Marry和Ben是亲戚。请写一个程序,对于我们的关于亲戚关系的提问,以最快的速度给出答案。

Input
输入由两部分组成。
第一部分以N,M开始。N为问题涉及的人的个数(1  N  20000)。这些人的编号为1,2,3,…, N。下面有M行(1  M  1 000 000),每行有两个数ai, bi,表示已知ai和bi是亲戚。第二部分以Q开始。以下Q行有Q个询问(1 <=  Q < = 1 000 000),每行为ci, di,表示询问ci和di是否为亲戚。

Output
对于每个询问ci, di,输出一行:若ci和di为亲戚,则输出“Yes”,否则输出“No”。

Sample Input
10 7 //10个人,7组关系
2 4
5 7
1 3
8 9
1 2
5 6
2 3
3 //3组询问
3 4
7 10
8 9
Sample Output
Yes
No
Yes

这是一道典型的并查集类题目开始先给每一个人建立一个集合,如果a-b有关系; 就合并a-b所在的集合,将b的祖先指向a的祖先;询问时如果a,b在同一个集合里,就输出YES,否则输出NO;
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int f[N];
int n,m,Q;
int find(int x){                 dfs合并集合if(f[x]!=x)f[x]=find(f[x]);          把他的父亲指向他的最高祖先return f[x];
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)f[i]=i;for(int i=1,x,y;i<=m;i++){scanf("%d%d",&x,&y);int r=find(x);        r是x的最高祖先int l=find(y);       l是y的最高祖先if(r!=y)f[r]=l;       如果x,y不在同一集合,将r的父亲指向l}scanf("%d",&Q);for(int i=1,x,y;i<=Q;i++){scanf("%d%d",&x,&y);if(find(x)==find(y))       因为x可能是y的爷爷的爷爷,所以要再找一遍printf("Yes\n");else printf("No\n");}return 0;
}

Problem Z: 亲戚相关推荐

  1. Nwafu-OJ-1429 Problem Z C语言实习题五——4.用指针实现数据位置调整

    问题 Z: C语言实习题五--4.用指针实现数据位置调整 时间限制: 1 Sec  内存限制: 128 MB 题目描述 用指针实现:由键盘输入10个整数,将最大的调到最后,最小的调到最前. 输入 10 ...

  2. c语言趣味教学题目及答案,C语言趣味程序设计-题目百例.doc

    C语言趣味程序设计-题目百例 Contest - 2011级C语言课程大作业Start Time: 2012-02-19 16:25:00 End Time: 2012-03-01 22:00:00C ...

  3. Lagrange multiplier method (拉格朗日乘数法)

    The Lagrange multiplier method is used to solve the problem that find the extremum of a function z=f ...

  4. 手机屏幕xy坐标软件_软件工程中的xy问题

    手机屏幕xy坐标软件 XY problem is classified as a communication problem in which the person who asks the ques ...

  5. Power OJ 2844: New contest【模拟】

    题目链接 Description 91029102 年,国际大学生程序设计竞赛已经有了显著的发展,现在它是银河系大学生程序设计竞赛. 今年有 nn 个队参加比赛,每只队伍都有一个编号 1,2,3,4, ...

  6. 英汉翻译词典软件代码

    Private Sub Command1_Click() Dim i, j As String Dim n As Integer i = Text1.Text For n = 1 To 6 Selec ...

  7. 新英汉翻译词典软件vb代码

    Private Sub Command1_Click() Dim i, Z As String Dim n As Integer i = Text1.Text For n = 1 To 960 Sel ...

  8. 寒假练习题解 第二周 1.25-1.31

    每日一练 1.25 Problem A Luxurious Houses 题意:给 n 个数 a[i],问使得 a[i] 为 [i,n] 最大值的时候需要给 a[i] 增加多少 简析:可以倒着扫一遍, ...

  9. 趣味c语言题目,C语言趣味程序设计题目百例.doc

    C语言趣味程序设计题目百例 Contest - 2011级C语言课程大作业Start Time: 2012-02-19 16:25:00 End Time: 2012-03-01 22:00:00Cu ...

  10. c语言趣味程序设计过桥,计算机c语言趣味的程序设计——题目百例.doc

    计算机c语言趣味的程序设计--题目百例 Contest - 2011级C语言课程大作业 Start Time: 2012-02-19 16:25:00 End Time: 2012-03-01 22: ...

最新文章

  1. WinCE5.0中应用程序如何直接写屏
  2. vagrant 基本命令讲解
  3. 開啟 Excel 檔案出現錯誤訊息【Windows 找不到檔案路徑
  4. LeetCode 637 二叉树的层平均值-简单
  5. Java World中的GraphQL简介
  6. Logistic Regression Classifier逻辑回归
  7. 执行git push出现Everything up-to-date
  8. uuid java 重复_Java中使用UUID工具类生成唯一标志防止重复
  9. Qt 自定义事件的实现
  10. 【图论】【启发式搜索】【二分查找】[POJ 3897]Maze Stretching
  11. Spring学习总结(14)——Spring10种常见异常解决方法
  12. 推荐几本jquery书
  13. Win10重装系统后如何合并分区?
  14. 表格识别----基于模板的文字识别结果结构化处理技术
  15. Mac系统内存越来越大?Mac内存清理技巧
  16. 计算机表格填充,excel自动填充怎样快速填充一列?/excle填充工具
  17. 移动距离 X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下:
  18. math库和randon库
  19. asp.net实现识别客户端浏览器或操作系统
  20. 【编程语言】Scala下载及安装教程 CentOS 7

热门文章

  1. C - Write the program expr which evaluates a reverse Polish expression from the command line
  2. Linux_常用的磁盘列阵(RAID)
  3. 高频面试题之JVM灵魂拷问,21题带你通关!
  4. 外牌免检车辆上海年检
  5. 理解计算-从根号 2 到 AlphaGo
  6. 4.各种动物英语表示
  7. android 多渠道打包不同的包名、应用名、应用图标
  8. MATLAB图像分割的GUI设计
  9. java8中for循环的几种写法
  10. 远程办公和分布式协作