家庭关系  

时间限制(普通/Java):1000MS/3000MS     运行内存限制:65536KByte
总提交: 38            测试通过: 9

描述

给定若干家庭成员之间的关系,判断2个人是否属于同一家庭,即2个人之间均可以通过这些关系直接或者间接联系。

输入

输入数据有多组,每组数据的第一行为一个正整数n(1<=n<=100),表示有100个关系描述,接下来有n行,每行的描述方式为:
p1 p2 c
其中p1、p2和c均为一串文本,表示每个人的姓名,p1和p2为c的父亲和母亲。
最后一行包含2个字符串a和b,为待判断的两个人的姓名。
每个人的姓名由大小写字母组成,长度不超过80。

若n为0,表示输入结束。

输出

如果a和b在同一个家庭中,则输出Yes
否则输出No

样例输入

  1. 2
  2. Barbara Bill Ted
  3. Nancy Ted John
  4. John Barbara
  5. 3
  6. Lois Frank Jack
  7. Florence Bill Fred
  8. Annie Fred James
  9. James Jack
  10. 0

样例输出

  1. Yes
  2. No

题目上传者

crq

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <vector>
  6. #include <queue>
  7. #include <map>
  8. using namespace std;
  9. const int maxn = 1000;
  10. int gn;
  11.  
  12. int f[maxn];
  13.  
  14. int getfather(int x) {
  15. if(x == f[x]) return x;
  16. else return f[x] = getfather(f[x]);
  17. }
  18.  
  19. void work(int x, int y, int z) {
  20. int t1 = getfather(x);
  21. int t2 = getfather(y);
  22. if(t1 != t2) {
  23. f[t1] = t2;
  24. }
  25. int t3 = getfather(z);
  26. if(t2 != t3) {
  27. f[t3] = t2;
  28. }
  29. }
  30.  
  31. int main()
  32. {
  33. int i, j;
  34. map<string, int> mymap;
  35. map<string, int>::iterator it;
  36. while(scanf("%d", &gn) != EOF && gn)
  37. {
  38. int cnt = 0;
  39. for(i = 0; i < maxn; i++) f[i] = i;//!!!!
  40. mymap.clear();
  41. string str[3];
  42. for(i = 0; i < 3; i++) str[i].clear();
  43. for(i = 0; i < gn; i++) {
  44. for(j = 0; j < 3; j++) {
  45. cin >> str[j];
  46. it = mymap.find(str[j]);
  47. if(it == mymap.end()){
  48. mymap[str[j]] = ++cnt;
  49. }
  50. }
  51. int a[3];
  52. a[0] = mymap[str[0]];
  53. a[1] = mymap[str[1]];
  54. a[2] = mymap[str[2]];
  55. work(a[0], a[1], a[2]);
  56. }
  57. string s, t;
  58. cin >> s >> t;//所有判读的人不在集合里面.
  59. int start = 0;
  60. int endx = 0;
  61. start = mymap[s];
  62. // printf("start = %d\n", start);
  63. endx = mymap[t];
  64. // printf("endx = %d\n", endx);
  65. if(start == 0 || endx == 0) {//WA了好多次.
  66. printf("No\n");
  67. continue;
  68. }
  69. int t1 = getfather(start);
  70. int t2 = getfather(endx);
  71. if(t1 == t2)
  72. cout << "Yes" << endl;
  73. else cout << "No" << endl;
  74. }
  75. return 0;
  76. }

TOJ3660家庭关系(并查集+hash+图的连通性)的更多相关文章

  1. PAT甲题题解-1126. Eulerian Path (25)-欧拉回路+并查集判断图的连通性

    题目已经告诉如何判断欧拉回路了,剩下的有一点要注意,可能图本身并不连通. 所以这里用并查集来判断图的联通性. #include <iostream> #include <cstdio ...

  2. 又见关系并查集 以POJ 1182 食物链为例

    简单的关系并查集一般非常easy依据给出的关系搞出一个有向的环,那么两者之间的关系就变成了两者之间的距离. 对于此题: 若u.v不在一个集合内,则显然此条语句会合法(暂且忽略后两条.下同). 那么将f ...

  3. poj 1182 食物链(关系并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 62824   Accepted: 18432 Description ...

  4. PATL2-007. 家庭房产-并查集

    L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...

  5. Find them, Catch them(POJ 1703 关系并查集)

    Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38668   Accepted: ...

  6. poj 2492(关系并查集) 同性恋

    题目;http://poj.org/problem?id=2492 卧槽很前卫的题意啊,感觉节操都碎了, t组测试数据,然后n,m,n条虫子,然后m行,每行两个数代表a和b有性行为(默认既然能这样就代 ...

  7. poj 1182 (关系并查集) 食物链

    题目传送门:http://poj.org/problem?id=1182 这是一道关系型并查集的题,对于每个动物来说,只有三种情况:同类,吃与被吃: 所以可以用0,1,2三个数字代表三种情况,在使用并 ...

  8. BZOJ1050 [HAOI2006]旅行comf[并查集判图连通性]

    ★ Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径 ...

  9. tyvj1017 - 冗余关系 ——并查集

    题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1017 并查集 #include <cstdio> #include <cstdlib& ...

随机推荐

  1. commons-lang阅读(一)

    基于commons-lang-2.4.jar org.apache.commons.lang.time.DateFormatUtils类 package org.apache.commons.lang ...

  2. [CF Round #295 div2] C. DNA Alignment 【观察与思考0.0】

    题目链接:C. DNA Alignment 题目大意就不写了,因为叙述会比较麻烦..还是直接看英文题面吧. 题目分析 经过观察与思考,可以发现,构造的串 T 的每一个字符都与给定串 S 的每一个字符匹 ...

  3. HTML Imports

    为什么需要导入? 先想想你在 web 上是如何加载不同类型的资源.对于 JS,我们有 <script src>.<link rel="stylesheet"> ...

  4. 横向技术分析C#、C++和Java优劣

    转自横向技术分析C#.C++和Java优劣 C#诞生之日起,关于C#与Java之间的论战便此起彼伏,至今不辍.抛却Microsoft与Sun之间的恩怨与口角,客观地从技术上讲,C#与Java都是对传统 ...

  5. 【POJ3415】 Common Substrings(后缀数组|SAM)

    Common Substrings Description A substring of a string T is defined as: T(i, k)=TiTi+1...Ti+k-1, 1≤i≤ ...

  6. 【UVA11324】The Largest Clique (SCC)

    题意: 给一张有向图G,求一个结点数最大的结点集,使得该结点中任意两个结点 u 和 v满足:要么 u 可以到达 v, 要么 v 可以到达 u(u 和 v 相互可达也可以). 分析: Tarjan求SC ...

  7. java中的日期格式

    时间日期标识符: yyyy:年 MM:月 dd:日 hh:~12小时制(-) HH:24小时制(-) mm:分 ss:秒 S:毫秒 E:星期几 D:一年中的第几天 F:一月中的第几个星期(会把这个月总 ...

  8. 14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构

    14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构 一个InnoDB 表的物理行结构取决于在创建表指定的行格式 默认, Inno ...

  9. Android MonkeyRunner自动拨打电话

    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice import time device = MonkeyRunner.wa ...

  10. Solr 多核(MultiCore)配置

    Solr Multicore意义        Solr Multicore 是 solr 1.3 的新特性.其目的一个solr实例,可以有多个搜索应用.< xmlnamespace prefi ...