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

时间限制
200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

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

输入格式:

输入第一行给出一个正整数N(2 <= N <= 104),随后N行,每行按以下格式给出一个人的信息:

本人ID 性别 父亲ID 母亲ID

其中ID是5位数字,每人不同;性别M代表男性、F代表女性。如果某人的父亲或母亲已经不可考,则相应的ID位置上标记为-1。

接下来给出一个正整数K,随后K行,每行给出一对有情人的ID,其间以空格分隔。

注意:题目保证两个人是同辈,每人只有一个性别,并且血缘关系网中没有乱伦或隔辈成婚的情况。

输出格式:

对每一对有情人,判断他们的关系是否可以通婚:如果两人是同性,输出“Never Mind”;如果是异性并且关系出了五服,输出“Yes”;如果异性关系未出五服,输出“No”。

输入样例:

  1. 24
  2. 00001 M 01111 -1
  3. 00002 F 02222 03333
  4. 00003 M 02222 03333
  5. 00004 F 04444 03333
  6. 00005 M 04444 05555
  7. 00006 F 04444 05555
  8. 00007 F 06666 07777
  9. 00008 M 06666 07777
  10. 00009 M 00001 00002
  11. 00010 M 00003 00006
  12. 00011 F 00005 00007
  13. 00012 F 00008 08888
  14. 00013 F 00009 00011
  15. 00014 M 00010 09999
  16. 00015 M 00010 09999
  17. 00016 M 10000 00012
  18. 00017 F -1 00012
  19. 00018 F 11000 00013
  20. 00019 F 11100 00018
  21. 00020 F 00015 11110
  22. 00021 M 11100 00020
  23. 00022 M 00016 -1
  24. 00023 M 10012 00017
  25. 00024 M 00022 10013
  26. 9
  27. 00021 00024
  28. 00019 00024
  29. 00011 00012
  30. 00022 00018
  31. 00001 00004
  32. 00013 00016
  33. 00017 00015
  34. 00019 00021
  35. 00010 00011

输出样例:

  1. Never Mind
  2. Yes
  3. Never Mind
  4. No
  5. Yes
  6. No
  7. Yes
  8. No
  9. No
  10.  
  11. 大部分人的做法:思路:用map存节点,键是本人ID,值是个人信息,判断两个人是否能通婚,先标记一个人的五服,然后查找另一个人的五服,看是否能找到标记,如果能就说明两个人在五服之内。
    我的做法:比较类似,建单边,最多跑5次队列
    注意:父母也可能作为测试对象,性别需手动确定。被坑了
  1. #include<iostream>
  2. #include<cstring>
  3. #include<string>
  4. #include<queue>
  5. #include<algorithm>
  6. using namespace std;
  7. struct node
  8. {
  9. int v;
  10. int nxt;
  11. }e[];
  12.  
  13. int head[];
  14. int p[];
  15. int vis[];
  16. int b[];
  17. queue<int>q;
  18. int cnt=;
  19. void add(int u,int v)
  20. {
  21. e[cnt].v=v;
  22. e[cnt].nxt =head[u];
  23. head[u]=cnt++;
  24. }
  25.  
  26. int bfs(int u,int v)
  27. {
  28. q.push (u);
  29. q.push(v);
  30. b[u]=;
  31. b[v]=;
  32. while(!q.empty ())
  33. {
  34. int x=q.front ();q.pop();
  35. /*cout<<x<<" "<<b[x]<<endl;*/
  36. if(b[x]>) return ;
  37. for(int i=head[x];i!=-;i=e[i].nxt)
  38. {
  39.  
  40. int y=e[i].v;
  41. if(!vis[y])
  42. {
  43. b[y]=b[x]+;
  44. vis[y]=;
  45. q.push(y);
  46. }
  47. else
  48. {
  49. if(b[y]==) return ;
  50. else return ;
  51. }
  52. }
  53. }
  54. return ;
  55. }
  56. int main()
  57. {
  58. int n;
  59. cin>>n;
  60. memset(head,-,sizeof head);
  61. for(int i=;i<=n;i++)
  62. {
  63. int x;
  64. char c;
  65. int a,b;
  66. cin>>x>>c>>a>>b;
  67. if(c=='F') p[x]=;
  68. else p[x]=;
  69. if(a!=-)
  70. {
  71. add(x,a);
  72. p[a]=;//父母性别确定
  73. }
  74. if(b!=-)
  75. {
  76. add(x,b);
  77. p[b]=;//父母性别确定
  78. }
  79. }
  80. cin>>n;
  81. for(int i=;i<=n;i++)
  82. {
  83. int u,v;
  84. while(!q.empty ()) q.pop();
  85. memset(vis,,sizeof vis);
  86. memset(b,,sizeof b);
  87. cin>>u>>v;
  88. if(p[u]==p[v]) cout<<"Never Mind";
  89. else
  90. {
  91. int num=bfs(u,v);
  92. if(num==) cout<<"No";
  93. else cout<<"Yes";
  94. }
  95. if(i!=n) cout<<endl;
  96. }
  97. }
  1.  
  1.  

愿天下有情人都是失散多年的兄妹(bfs)的更多相关文章

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

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

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

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

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

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

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

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216 分析:一开始以为是并查集..... ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. JSP JavaBeans

    Javabean的设计原则 公有类 无参公有构造方法 私有属性 getter和setter方法 在Jsp页面中如何使用Javabeans? 像使用普通Java类一样,创建JavaBeans实例. 在J ...

  2. mysql里的ibdata1文件

    mysql大多数磁盘空间被 InnoDB 的共享表空间 ibdata1 使用.而你已经启用了 innodb_file_per_table,所以问题是: ibdata1存了什么? 当你启用了innodb ...

  3. 在Windows下使用adb logcat grep

    在Windows下使用adb logcat  grep 会提示 因为grep 为Linux命令,所以不能使用.怎么办呢? 这时候可以用到babun 下载地址:http://babun.github.i ...

  4. php特级课---2、网站大数据如何存储

    php特级课---2.网站大数据如何存储 一.总结 一句话总结: mysql主从,分库分表,mysql分区,mysql集群,Nosql 1.mysql主从服务器各自的功能是什么? 增删改,主服务器 查 ...

  5. 伪Excel导出新版代码

    /// <summary> /// 导出Excel CreateExcel(ds, "统计表.xls",new int[]{6,8}); /// </summar ...

  6. EF切换到Mysql数据库,更改web.config

    1)引用: MySql.Data.dll,MySql.Data.Entity.dll,MySql.Data.Entity.EF6.dll 2)添加: <system.data> <D ...

  7. os.path.abspath()的作用

    语法 os.path.abspath(path) 作用 返回绝对路径 实例 import os print(os.path.abspath(".")) #当前目录的绝对路径 pri ...

  8. hdu 2149 Public Sale(bash)

    Public Sale Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. 大视野 1012: [JSOI2008]最大数maxnumber(线段树/ 树状数组/ 单调队列/ 单调栈/ rmq)

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 9851  Solved: 4318[Submi ...

  10. android实现异步的问题小经验总结

    1.如下图所言,必须在UI线程中调用异步任务的子类 2.经过碰壁 测试 --.方法一中 @Override public void onClick(DialogInterface dialog, in ...