Time Limit: 3000 MS    Memory Limit: 131072 K


Description


据说 你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过六个人你就能够认识任何一个陌生人。

现在有n个互不认识的人
对于这一群人 我们要实现两个操作 1.介绍两个人互相之间认识,由于这n个人都非常热情好客 他们会介绍所有自己认识的人给对方 也会介绍给所有对方认识的人
也就是说 若 A 和 B 认识 ,C 和 D 认识,若我们介绍A和C认识 那么B和D也会互相认识
2.询问 某两个人 是否认识对方

Input


为多组数据
第一行为一个数 代表有多少组数据 对于每一组数据
第一行有两个数n m 分别代表有多少个人 和 多少个操作
接下来m行
对于每一行的第一个数 为1 或 2 代表当前操作是哪一类操作
若为操作1 则输入两个人a b 对这两个人执行操作1
若为操作2 则输入两个人a b 询问这两个人是否认识
(1<=n,m<=10000)

Output


对于每一个操作二
若认识 输出Yes
否则输出No

Sample Input


2
4 5
1 1 2
1 3 4
1 1 3
2 1 4
2 2 4
6 3
1 1 2
1 3 4
2 1 3

Sample Output


Yes
Yes
No

思路:本题是并查集的模板题,并查集可以用来判断所属团体,或者分析条件冲突(典型的如食物链问题,真假话判断问题),具体的大家可以上网百度。

AC代码:

#include <stdio.h>
#include <iostream>
using namespace std;
const int maxn=; int par[maxn],_rank[maxn]; void init(int n){
for(int i=;i<=n;i++){
par[i]=i;
_rank[i]=;
}
} int find(int x){
if(par[x]==x){
return x;
}else{
return par[x]=find(par[x]);
}
} void unite(int x,int y){
x=find(x);
y=find(y);
if(x==y)return; if(_rank[x]<_rank[y]){
par[x]=y;
}else{
par[y]=x;
if(_rank[x]==_rank[y])_rank[x]++;
}
} bool same(int x,int y){
return find(x)==find(y);
} int main(){
int T;
scanf("%d",&T);
while(T--){
int n,m;
scanf("%d %d",&n,&m);
init(n);
int a,b,c;
for(int i=;i<m;i++){
cin>>a>>b>>c;
if(a==){
unite(b,c);
}else{
if(same(b,c))printf("Yes\n");
else printf("No\n");
}
} }
return ;
}

最新文章

  1. AngularJS 之 Factory vs Service vs Provider【转】
  2. UE4 执行Console Command ----ExecuteConsoleCommand
  3. python面向对象编程(上)
  4. hibernate初次配置问题
  5. bndtools教程
  6. java克隆总结
  7. ES6-2
  8. eclipse 配置android sdk和maven
  9. SQL Mon 介绍
  10. 【NOI2005】维护数列
  11. chm 转 txt
  12. NOIP算法小结(转载)
  13. python全栈开发day51-jquery插件、@media媒体查询、移动端单位、Bootstrap框架
  14. 好久没考虑过的 sql 注入
  15. springmvc 解决 controller 中出现死循环并 stackoverflow 的问题
  16. HTML5本地存储之Web Storage实例篇,最有用的是localStorage
  17. 爬虫 解码gb1312类型
  18. Bank项目
  19. Python汉字转换成拼音
  20. LeetCode--125--验证回文串

热门文章

  1. HDU 5656 ——CA Loves GCD——————【dp】
  2. 判断img图片是否加载成功
  3. java中多线程中测试某个条件的变化用 if 还是用 while?
  4. win8及以上2012 R2,virtualbox 5.0.20安装centOS6以上各种注意事项
  5. [android] 天气app布局练习(三)
  6. rpm的参数
  7. php获取今日开始时间和结束时间
  8. 解决vue移动端适配问题
  9. mockito測試框架
  10. Docker常用操作指令