题目描述

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

输入格式

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

本人ID 性别 父亲ID 母亲ID
其中ID是5位数字,每人不同;性别M代表男性、F代表女性。如果某人的父亲或母亲已经不可考,则相应的ID位置上标记为-1。
接下来给出一个正整数K,随后K行,每行给出一对有情人的ID,其间以空格分隔。
注意:题目保证两个人是同辈,每人只有一个性别,并且血缘关系网中没有乱伦或隔辈成婚的情况。

输出格式

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

输入样例

24
00001 M 01111 -1
00002 F 02222 03333
00003 M 02222 03333
00004 F 04444 03333
00005 M 04444 05555
00006 F 04444 05555
00007 F 06666 07777
00008 M 06666 07777
00009 M 00001 00002
00010 M 00003 00006
00011 F 00005 00007
00012 F 00008 08888
00013 F 00009 00011
00014 M 00010 09999
00015 M 00010 09999
00016 M 10000 00012
00017 F -1 00012
00018 F 11000 00013
00019 F 11100 00018
00020 F 00015 11110
00021 M 11100 00020
00022 M 00016 -1
00023 M 10012 00017
00024 M 00022 10013
9
00021 00024
00019 00024
00011 00012
00022 00018
00001 00004
00013 00016
00017 00015
00019 00021
00010 00011

输出样例

Never Mind
Yes
Never Mind
No
Yes
No
Yes
No
No

分析

**此题需要设计一个结构包括个人的性别以及其父母的id号(默认为-1)。
之后每次输入都要把个人及其父母的性别关联起来。
在查找的过程中需要每次把st[]重置,同时对a的祖辈进行dfs(),遍历到的点标记为true.
之后对b同样进行5代之内的dfs,如果此时b的长辈有标记为true的,说明a、b具有共同的祖先,输出“No”,反之则为“Yes”
**

C++ 代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int n;
struct people{int sex,father=-1,mother=-1;
}peo[N];
bool st[N],flag;
void dfs(int cur,int generation)
{if(cur==-1) return;if(generation>5) return;st[cur]=1;dfs(peo[cur].father,generation+1);dfs(peo[cur].mother,generation+1);
}
void finddfs(int cur,int generation)
{if(cur==-1) return;if(generation>5) return;if(st[cur]) flag=true;finddfs(peo[cur].father,generation+1);finddfs(peo[cur].mother,generation+1);
}
int main()
{cin>>n;int id,father,mother;string sex;for(int i=0;i<n;i++){cin>>id>>sex;if(sex=="M") peo[id].sex=1;else peo[id].sex=0;cin>>peo[id].father>>peo[id].mother;peo[peo[id].father].sex=1;peo[peo[id].mother].sex=0;    }cin>>n;int a,b;for(int i=0;i<n;i++){cin>>a>>b;if(peo[a].sex==peo[b].sex) puts("Never Mind");else{memset(st,false,sizeof st);dfs(a,1);flag=false;finddfs(b,1);if(flag) puts("No");else puts("Yes");}}return 0;
}

L2-016 愿天下有情人都是失散多年的兄妹 (25分) C++相关推荐

  1. 7-57 愿天下有情人都是失散多年的兄妹 (25 分)(深搜)

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

  2. 【CCCC】L2-016 愿天下有情人都是失散多年的兄妹 (25分),,搜索公共祖先

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

  3. 7-13 愿天下有情人都是失散多年的兄妹 (25 分)

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

  4. L2-016 愿天下有情人都是失散多年的兄妹 (25 分)(C语言)(并查集)(dfs)(测试点坑)

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

  5. 天梯赛 L2-016 愿天下有情人都是失散多年的兄妹 (25 分)[测试点1 3 4][未填坑]

    L2-016 愿天下有情人都是失散多年的兄妹 (25 分) 思路: 在录入的时候用map和结构体储存性别,父母ID, 判断的时候先判断性别,再用dfs搜索第一个人五服之内的关系,并将关系任务ID存储到 ...

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

    题目详情 - L2-016 愿天下有情人都是失散多年的兄妹 (25 分) (pintia.cn) 题解:对于每个给出的编号进行层序遍历,把遍历到的元素存进集合里.如果两个集合存在交集,就代表它们存在公 ...

  7. PTA:7-106 愿天下有情人都是失散多年的兄妹 (25分)(bfs,dfs)

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

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

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

  9. 7-4 愿天下有情人都是失散多年的兄妹 (25 分)

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

  10. 7-2 愿天下有情人都是失散多年的兄妹 (25 分)

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

最新文章

  1. java 在线监测 trace_JDK自带的性能调优监测工具使用示例
  2. 自定义函数删除字母C语言,[编程入门]自定义函数之字符提取-题解(C语言代码)...
  3. MySQL筛选重复数据
  4. 批量替换_【脚本】AE照片墙模板图片批量替换脚本Multi Replacer
  5. Scala,一门「特立独行」的语言!
  6. Android adb 命令大全
  7. 基于单片机的指纹密码锁c语言程序,基于单片机的指纹识别电子密码锁设计(附程序,电路图)...
  8. openlayers6【十三】地图矢量图层 Vector 详解
  9. 基于Django框架的物联网空气质量监测系统的实现
  10. 如何开启计算机cpu虚拟化,win10如何开启虚拟化支持_win10开启cpu虚拟化的方法
  11. 如何用仅用C语言判断编译器的大小端
  12. python生成拼音
  13. 计算机网络 | 思科网络 | 什么是DHCPv4
  14. 小分子PEG的循环节可以做到1-36个,DSPE-PEG4-Mal
  15. 基于Gensim创建词向量
  16. F5负载均衡器通过iRules实现http应用的灵活转发
  17. python主题更改_jupyter notebook更换皮肤主题的实现
  18. raw图片处理软件:DxO PhotoLab for Mac
  19. hadoop所有版本的下载地址
  20. win10修复计算机没反应,win10修复引导【解决方法】

热门文章

  1. Android网络编程(一)HTTP协议原理
  2. MySql之查看用户信息
  3. HMM、Viterbi与中文分词
  4. 服务器无法连通有哪些原因
  5. SpringMVC执行流程【简单理解举例】
  6. 荧光显微镜中的彩色效应
  7. 脱胎换骨 WinXP优化精湛10招
  8. 生日快乐代码_祝雪无生日快乐! 5孔无级别罗汉真来了~只是…… 阿海千亿十连开...
  9. matlab利用GUI界面做简单的图像处理
  10. 我的IT之路,在哪里?