题目链接

https://www.patest.cn/contests/gplt/L2-016

思路

用BFS 每层 遍历当代 并且查找当代是否有重复 有重复就跳出 然后 POP 并且将他们的下一代 压入 队列

但是有一个点 要注意

就是 如果存在两个人 他们的上一代 都不可考

那么就默认没有血缘关系

那么就要根据 性别来判断

如果 这两个人 是出现在 某个人的父亲 或 母亲中呢 所以在输入的时候 对于父亲和母亲的性别是没有标记的 那么就会出错

所以要加入 父亲和母亲的性别标记

其实还有种简单的方法 就是用SET就可以了 两个 分别压入 然后判断 SET的大小有没有改变 如果没有改变 就是有重复

或者 用数组标记

AC代码

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <ctype.h>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <climits>
  7. #include <ctime>
  8. #include <iostream>
  9. #include <algorithm>
  10. #include <deque>
  11. #include <vector>
  12. #include <queue>
  13. #include <string>
  14. #include <map>
  15. #include <stack>
  16. #include <set>
  17. #include <numeric>
  18. #include <sstream>
  19. #include <iomanip>
  20. #include <limits>
  21. using namespace std;
  22. typedef long long ll;
  23. typedef long double ld;
  24. typedef unsigned long long ull;
  25. typedef pair <int, int> pii;
  26. typedef pair <ll, ll> pll;
  27. typedef pair<string, int> psi;
  28. typedef pair<string, string> pss;
  29. const double PI = 3.14159265358979323846264338327;
  30. const double E = exp(1);
  31. const double eps = 1e-6;
  32. const int INF = 0x3f3f3f3f;
  33. const int maxn = 1e6 + 5;
  34. const int MOD = 1e9 + 7;
  35. map <int, pii> m;
  36. map <int, int> judge[2];
  37. queue <int> q[2];
  38. int ans;
  39. void bfs(int cur)
  40. {
  41. if (cur == 7)
  42. return;
  43. for (int i = 0; i < 2; i++)
  44. {
  45. judge[i].clear();
  46. while (!q[i].empty())
  47. {
  48. int num = q[i].front();
  49. q[i].pop();
  50. if (num != -1)
  51. judge[i][num] = 1;
  52. }
  53. }
  54. map <int, int>::iterator it;
  55. for (it = judge[0].begin(); it != judge[0].end(); it++)
  56. {
  57. if (judge[1][it->first])
  58. {
  59. ans = cur;
  60. return;
  61. }
  62. else
  63. judge[1].erase(it -> first);
  64. }
  65. for (int i = 0; i < 2; i++)
  66. {
  67. for (it = judge[i].begin(); it != judge[i].end(); it++)
  68. {
  69. if (m[it->first].first != -1)
  70. q[i].push(m[it->first].first);
  71. if (m[it->first].second != -1)
  72. q[i].push(m[it->first].second);
  73. }
  74. }
  75. bfs(cur + 1);
  76. }
  77. int main()
  78. {
  79. map <int, int> vis, opt;
  80. int n;
  81. scanf("%d", &n);
  82. int a, b, c, d;
  83. char code;
  84. for (int i = 0; i < n; i++)
  85. {
  86. scanf("%d %c %d %d", &a, &code, &b, &c);
  87. opt[a] = 1;
  88. if (code == 'M')
  89. vis[a] = 0;
  90. else
  91. vis[a] = 1;
  92. m[a].first = b;
  93. if (b != -1)
  94. {
  95. if (opt[b] == 0)
  96. {
  97. m[b].first = -1;
  98. m[b].second = -1;
  99. }
  100. vis[b] = 0;
  101. }
  102. m[a].second = c;
  103. if (c != -1)
  104. {
  105. if (opt[c] == 0)
  106. {
  107. m[c].first = -1;
  108. m[c].second = -1;
  109. }
  110. vis[c] = 1;
  111. }
  112. }
  113. scanf("%d", &n);
  114. for (int i = 0; i < n; i++)
  115. {
  116. scanf("%d%d", &a, &b);
  117. if (vis[a] == vis[b])
  118. printf("Never Mind\n");
  119. else
  120. {
  121. while (!q[0].empty())
  122. q[0].pop();
  123. while (!q[1].empty())
  124. q[1].pop();
  125. q[0].push(a);
  126. q[1].push(b);
  127. ans = INT_MAX;
  128. bfs(1);
  129. if (ans > 5)
  130. printf("Yes\n");
  131. else
  132. printf("No\n");
  133. }
  134. }
  135. }

PAT 天梯赛 L2-016. 愿天下有情人都是失散多年的兄妹 【BFS】的更多相关文章

  1. 【PTA 天梯赛】L2-016. 愿天下有情人都是失散多年的兄妹(深搜)

    呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...

  2. PAT L2-016. 愿天下有情人都是失散多年的兄妹 (BFS)

    L2-016. 愿天下有情人都是失散多年的兄妹 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 呵呵.大家都知道五服以内不得通婚 ...

  3. 愿天下有情人都是失散多年的兄妹(bfs)

    L2-016. 愿天下有情人都是失散多年的兄妹 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 呵呵.大家都知道五服以内不得通婚 ...

  4. L2-016. 愿天下有情人都是失散多年的兄妹(深搜)*

    L2-016. 愿天下有情人都是失散多年的兄妹 参考博客 #include<iostream> #include<cstdio> #include<cstring> ...

  5. L2-016 愿天下有情人都是失散多年的兄妹

    L2-016 愿天下有情人都是失散多年的兄妹 (25 分)   呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你 ...

  6. PAT 天梯赛练习集 L2-016. 愿天下有情人都是失散多年的兄妹

    题目链接:https://www.patest.cn/contests/gplt/L2-016 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母. ...

  7. 团体程序设计天梯赛 L2-016. 愿天下有情人都是失散多年的兄妹

    同时也要记录父母的性别,输出询问时要用到 #include <stdio.h> #include <stdlib.h> #include <string.h> #i ...

  8. PAT L2-016 愿天下有情人都是失散多年的兄妹

    https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216 呵呵.大家都知道五服以内不得通婚,即两个人最 ...

  9. PAT L2-016 愿天下有情人都是失散多年的兄妹(深搜)

    呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...

随机推荐

  1. mongo: 改

    语法:db.CollectionName.upadte(查询表达式,新值,选项); 查询表达式:定位哪些列是要被修改的列(即使查询表达式能命中多行,默认也只改一行,如果想改多行,可以用multi选项, ...

  2. Android给力模拟器,秒杀原生模拟器到渣

    1 http://www.eoe.cn/news/17433.html?f_section=new&f_section=new 备注:1秒开机,操作超流畅

  3. angular中通过CSS使下拉列表默认值变灰

    angular版本:angular5 先看效果图: drop down的样式是我用CSS样式控制的,没有用插件.想要改变Drop Down List里的默认值的颜色,我的思路是这样的. 在<se ...

  4. html实现网站全局按钮点击后置灰,不允许连续点击

    <script> document.addEventListener("mouseup", upHandler, true); function upHandler(e ...

  5. Python 多线程和单线程本质应用区别

    先了解下CPU的简单运行原理: 它运行速度非常快,1s内可以运行成千上万次,一个核心可以把1s切分成成千上万个时间片段,这个核心确实同时只能运行一个任务:但是可以将多个任务交替执行,比如上一个时间片段 ...

  6. SpringCloud系列三:将微服务注册到Eureka Server上

    1. 回顾 通过上篇博客的讲解,我们知道硬编码提供者地址的方式有不少问题.要想解决这些问题,服务消费者需要一个强大的服务发现机制,服务消费者使用这种机制获取服务提供者的网络信息.不仅如此,即使服务提供 ...

  7. java之静态代理

    © 版权声明:本文为博主原创文章,转载请注明出处 定义: - 为其他对象提供一种代理以控制对这个对象的访问 组成: 抽象角色:通过接口或抽象类声明真正角色实现的业务方法 真实角色:实现抽象角色,定义真 ...

  8. 图解WinHex使用入门

    一 Winhex和相关概念简单介绍 1 Winhex 是在Windows下执行的十六进制编辑软件,此软件功能很强大,有完好的分区管理功能和文件管理功能.能自己主动分析分区链和文件簇链.能对硬盘进行不同 ...

  9. ArrayList remove注意事项

    例子1: List<Integer>list=new ArrayList<>(); list.add(1); list.add(2); list.add(2); list.ad ...

  10. Win7 设置、访问共享文件夹

    一.设置共享文件夹 右键点击文件夹,打开“属性”窗口,选择“共享”选项卡 点击“共享”按钮,打开“文件共享”窗口,在下拉列表中选择账户,点“添加”,最后点“共享”按钮. 二.访问 \\192.168. ...