Problem Z: 亲戚
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: 亲戚相关推荐
- Nwafu-OJ-1429 Problem Z C语言实习题五——4.用指针实现数据位置调整
问题 Z: C语言实习题五--4.用指针实现数据位置调整 时间限制: 1 Sec 内存限制: 128 MB 题目描述 用指针实现:由键盘输入10个整数,将最大的调到最后,最小的调到最前. 输入 10 ...
- c语言趣味教学题目及答案,C语言趣味程序设计-题目百例.doc
C语言趣味程序设计-题目百例 Contest - 2011级C语言课程大作业Start Time: 2012-02-19 16:25:00 End Time: 2012-03-01 22:00:00C ...
- Lagrange multiplier method (拉格朗日乘数法)
The Lagrange multiplier method is used to solve the problem that find the extremum of a function z=f ...
- 手机屏幕xy坐标软件_软件工程中的xy问题
手机屏幕xy坐标软件 XY problem is classified as a communication problem in which the person who asks the ques ...
- Power OJ 2844: New contest【模拟】
题目链接 Description 91029102 年,国际大学生程序设计竞赛已经有了显著的发展,现在它是银河系大学生程序设计竞赛. 今年有 nn 个队参加比赛,每只队伍都有一个编号 1,2,3,4, ...
- 英汉翻译词典软件代码
Private Sub Command1_Click() Dim i, j As String Dim n As Integer i = Text1.Text For n = 1 To 6 Selec ...
- 新英汉翻译词典软件vb代码
Private Sub Command1_Click() Dim i, Z As String Dim n As Integer i = Text1.Text For n = 1 To 960 Sel ...
- 寒假练习题解 第二周 1.25-1.31
每日一练 1.25 Problem A Luxurious Houses 题意:给 n 个数 a[i],问使得 a[i] 为 [i,n] 最大值的时候需要给 a[i] 增加多少 简析:可以倒着扫一遍, ...
- 趣味c语言题目,C语言趣味程序设计题目百例.doc
C语言趣味程序设计题目百例 Contest - 2011级C语言课程大作业Start Time: 2012-02-19 16:25:00 End Time: 2012-03-01 22:00:00Cu ...
- c语言趣味程序设计过桥,计算机c语言趣味的程序设计——题目百例.doc
计算机c语言趣味的程序设计--题目百例 Contest - 2011级C语言课程大作业 Start Time: 2012-02-19 16:25:00 End Time: 2012-03-01 22: ...
最新文章
- WinCE5.0中应用程序如何直接写屏
- vagrant 基本命令讲解
- 開啟 Excel 檔案出現錯誤訊息【Windows 找不到檔案路徑
- LeetCode 637 二叉树的层平均值-简单
- Java World中的GraphQL简介
- Logistic Regression Classifier逻辑回归
- 执行git push出现Everything up-to-date
- uuid java 重复_Java中使用UUID工具类生成唯一标志防止重复
- Qt 自定义事件的实现
- 【图论】【启发式搜索】【二分查找】[POJ 3897]Maze Stretching
- Spring学习总结(14)——Spring10种常见异常解决方法
- 推荐几本jquery书
- Win10重装系统后如何合并分区?
- 表格识别----基于模板的文字识别结果结构化处理技术
- Mac系统内存越来越大?Mac内存清理技巧
- 计算机表格填充,excel自动填充怎样快速填充一列?/excle填充工具
- 移动距离 X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下:
- math库和randon库
- asp.net实现识别客户端浏览器或操作系统
- 【编程语言】Scala下载及安装教程 CentOS 7