1. Time Limit: 3000 MS Memory Limit: 131072 K

  1.  

Description

  1.  
  2. 据说 你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过六个人你就能够认识任何一个陌生人。
  3.  
  4. 现在有n个互不认识的人
  5. 对于这一群人 我们要实现两个操作
  6.  
  7. 1.介绍两个人互相之间认识,由于这n个人都非常热情好客 他们会介绍所有自己认识的人给对方 也会介绍给所有对方认识的人
  8. 也就是说 A B 认识 C D 认识,若我们介绍AC认识 那么BD也会互相认识
  9. 2.询问 某两个人 是否认识对方

Input

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

Output

  1.  
  2. 对于每一个操作二
  3. 若认识 输出Yes
  4. 否则输出No

Sample Input

  1.  
  2. 2
  3. 4 5
  4. 1 1 2
  5. 1 3 4
  6. 1 1 3
  7. 2 1 4
  8. 2 2 4
  9. 6 3
  10. 1 1 2
  11. 1 3 4
  12. 2 1 3

Sample Output

  1.  
  2. Yes
  3. Yes
  4. No

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

AC代码:

  1. #include <stdio.h>
  2. #include <iostream>
  3. using namespace std;
  4. const int maxn=;
  5.  
  6. int par[maxn],_rank[maxn];
  7.  
  8. void init(int n){
  9. for(int i=;i<=n;i++){
  10. par[i]=i;
  11. _rank[i]=;
  12. }
  13. }
  14.  
  15. int find(int x){
  16. if(par[x]==x){
  17. return x;
  18. }else{
  19. return par[x]=find(par[x]);
  20. }
  21. }
  22.  
  23. void unite(int x,int y){
  24. x=find(x);
  25. y=find(y);
  26. if(x==y)return;
  27.  
  28. if(_rank[x]<_rank[y]){
  29. par[x]=y;
  30. }else{
  31. par[y]=x;
  32. if(_rank[x]==_rank[y])_rank[x]++;
  33. }
  34. }
  35.  
  36. bool same(int x,int y){
  37. return find(x)==find(y);
  38. }
  39.  
  40. int main(){
  41. int T;
  42. scanf("%d",&T);
  43. while(T--){
  44. int n,m;
  45. scanf("%d %d",&n,&m);
  46. init(n);
  47. int a,b,c;
  48. for(int i=;i<m;i++){
  49. cin>>a>>b>>c;
  50. if(a==){
  51. unite(b,c);
  52. }else{
  53. if(same(b,c))printf("Yes\n");
  54. else printf("No\n");
  55. }
  56. }
  57.  
  58. }
  59. return ;
  60. }

SOJ4480 Easy Problem IV (并查集)的更多相关文章

  1. Codeforces 954I Yet Another String Matching Problem(并查集 + FFT)

    题目链接  Educational Codeforces Round 40  Problem I 题意  定义两个长度相等的字符串之间的距离为:   把两个字符串中所有同一种字符变成另外一种,使得两个 ...

  2. ZOJ - 3761 Easy billiards 【并查集+DFS】

    题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3761 题意 在一个桌面上,给出一些球 如果在A球的某个方向的前方 ...

  3. The Preliminary Contest for ICPC Asia Xuzhou 2019 B. so easy (unordered_map+并查集)

    这题单用map过不了,太慢了,所以改用unordered_map,对于前面删除的点,把它的父亲改成,后面一位数的父亲,初始化的时候,map里是零,说明它的父亲就是它本身,最后输出答案的时候,输出每一位 ...

  4. poj1182 食物链(并查集 好题)

    https://vjudge.net/problem/POJ-1182 并查集经典题 对于每只动物创建3个元素,x, x+N, x+2*N(分别表示x属于A类,B类和C类). 把两个元素放在一个组代表 ...

  5. Aizu2170 Marked Ancestor(并查集)

    https://vjudge.net/problem/Aizu-2170 并查集用于管理元素分组情况. 建树pre[]记录父节点,一开始只有结点1被标记了,所以find()最终得到的根都是1. 如果遇 ...

  6. 并查集&线段树&树状数组&排序二叉树

    超级无敌巨牛逼并查集(带权并查集)https://vjudge.net/problem/UVALive-4487 带删点的加权并查集 https://vjudge.net/problem/UVA-11 ...

  7. 【CodeForces - 1167C 】News Distribution(并查集)

    News Distribution 题意 大概就是分成几个小团体,给每个人用1 - n编号,当对某个人传播消息的时候,整个小团体就知道这个消息,输出 分别对1 - n编号的某个人传递消息时,有多少人知 ...

  8. Brain Network (easy)(并查集水题)

    G - Brain Network (easy) Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  9. Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem C (Codeforces 828C) - 链表 - 并查集

    Ivan had string s consisting of small English letters. However, his friend Julia decided to make fun ...

随机推荐

  1. 从websphere6.1迁移到weblogic10.3的问题总结--转

    http://blog.itpub.net/9399028/viewspace-692974/ 以前用weblogic低版本的时候,感觉挺容易的,也没什么要注意的,这次真正把应用从websphere迁 ...

  2. 关于android studio2.3和android studio3.0

    今天又重新把androidstudio2.3重新装上了,实在是受不了android studio3.0了,太恶心人了 说一下为何改用android studio3.0: 优点: 1. 如果只是写纯应用 ...

  3. jvm options

    http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#Options Categories of J ...

  4. PHP学习7——文件系统

    主要内容: 打开和关闭文件 文件类型 文件处理 目录处理 访问远程文件 文件锁定 文件上传 数据除了可以存储在数据库中,我们主要的还是存储在文件中,而且存储在文件中更加的方便直接. 打开和关闭文件 打 ...

  5. html空白文字宽度

    原文链接 名称 编号 描述     不断行的空白(1个字符宽度)     半个空白(1个字符宽度)     一个空白(2个字符宽度)     窄空白(小于1个字符宽度) 小写加分号!

  6. 流畅的python和cookbook学习笔记(三)

    1.双向队列 collections.deque 类(双向队列)是一个线程安全.可以快速从两端添加或者删除元素的数据类型. rotate和popleft操作,rorate可以把前后元素换位.pople ...

  7. JDBC编程错误:Exception in thread "main" java.sql.SQLException: Access denied for user ''@'localhost' (using password: YES)

    出现上面的错误是因为连接数据库的用户名不对或密码赋值不对,请对用户名和密码进行检查. 或者在程序中没有获取到正确的用户名或密码.看是否少写了用户名或密码.

  8. Android xmlns 的作用及其自定义

    转自:http://blog.csdn.net/chuchu521/article/details/8052855 xmlns:Android="http://schemas.android ...

  9. CAP理论-解析

          分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:● 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值.(等同于所有节点访问同一份最新的数据副本) ...

  10. div居中方式

    1. position: absolute; top:50%:left: 50%; margin-top: -高度的一半; margin-left: -宽度的一半(此方法适用于固定宽高的元素) 注: ...