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

输入第一行给出一个正整数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

一开始看到题,十分懵逼,仔细思考,父母有多个孩子,父母可以离婚,孩子有一双父母,多对多关系,直接建个图,对于询问的节点,DFS或BFS五层逐一对照看有没有重复即可
这个题一开始我没有考虑存储父母节点(就是作为父母出现但是没有作为孩子出现的节点),因为我觉得父母节点的父母节点未知,那么搜索到此结束即可
坑就在这,题目会问这种父母节点能否婚配。。。


```cpp
#include <bits/stdc++.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <cstring>
#include <stdio.h>
#include <queue>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <string>#define MAX 10010
#define INF 0x3f3f3f3f
#define EXP 1e-9
#define DEUBG 0
#define MOD 1000000007using namespace std;typedef long long ll;int n,m,t,k;
struct node {string name,fa,ma;char sex;
}a[MAX*10];
map<string,int>mp;
string name;
string fa,ma;
string sk[MAX];
int top=0;
string sk2[MAX];
int tp2=0;
int sex[MAX*10];
int cnt=0;void DFS(string id,int d){if(d==6)return ;int x=mp[id];sk[top++]=id;if(x==0)return ;if(a[x].fa.compare("-1")==0){return ;}else {DFS(a[x].fa,d+1);}if(a[x].ma.compare("-1")==0){return ;}else {DFS(a[x].ma,d+1);}
}void dfs(string id,int d){if(d==6)return ;int x=mp[id];sk2[tp2++]=id;if(x==0)return ;if(a[x].fa.compare("-1")==0){return ;}else {dfs(a[x].fa,d+1);}if(a[x].ma.compare("-1")==0){return ;}else {dfs(a[x].ma,d+1);}
}void Print(){for(int i=0;i<cnt;i++){cout<<a[i].name<<" "<<a[i].fa<<" "<<a[i].ma<<endl;}
}void Print2(){for(int i=0;i<top;i++){cout << sk[i]<<endl;}printf("--------\n");for(int i=0;i<tp2;i++){cout << sk2[i]<<endl;}
}int check(string id1,string id2){tp2=top=0;DFS(id1,1);dfs(id2,1);
//  Print2();for(int i=0;i<top;i++){for(int j=0;j<tp2;j++){if(sk[i].compare(sk2[j])==0){return 0;}}}return 1;
}int main(){memset(sex,-1,sizeof(sex));string id1,id2;int ii1,ii2;scanf("%d",&n);for(int i=0;i<n;i++){getchar();cin>>a[cnt].name;mp[a[cnt].name]=cnt;getchar();cin>>a[cnt].sex;sex[cnt]= a[cnt].sex=='M'?1:2;getchar();cin>>a[cnt].fa;getchar();cin>>a[cnt].ma;t=cnt++;if(a[t].fa.compare("-1")!=0&&mp[a[t].fa]==0){mp[a[t].fa]=cnt;a[cnt].name=a[t].fa;a[cnt].fa=a[cnt].ma="-1";a[cnt++].sex='M';}if(a[t].ma.compare("-1")!=0&&mp[a[t].ma]==0){mp[a[t].ma]=cnt;a[cnt].name=a[t].ma;a[cnt].fa=a[cnt].ma="-1";a[cnt++].sex='F';}}
//  Print();scanf("%d",&k);for(int i=0;i<k;i++){getchar();cin>>id1;getchar();cin>>id2;ii1=mp[id1];ii2=mp[id2];if(a[ii1].sex==a[ii2].sex){printf("Never Mind\n");}else if(check(id1,id2)){printf("Yes\n");}else {printf("No\n");}}return 0;
}

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

  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. Why AG3 client 815 transport entries disabled
  2. 排序系列02--选择排序
  3. ArcSDE 10.2 for Oracle 12C安装注意事项
  4. 伟大的通信使者——JSON(JavaScript版本)
  5. Python(51)_从100打印到0
  6. python做服务器需要什么模块_用Python自带的包建立简单的web服务器
  7. Flash builder4 插件版破解
  8. java统计字数_Java 8的字数统计
  9. 微软苏州2018冬季实习面试经历
  10. 游戏开发记录--敌人追寻玩家
  11. 更改控制面板硬件和声音电源选项导致cpu温度很高
  12. 通过excel生成不同dimens文件来实现安卓屏幕适配
  13. 排列组合相关笔试面试题(C++)
  14. 【语义分割】Searching for Efficient Multi-Scale Architectures for Dense Image Prediction翻译
  15. pandas等导入excel后 日期时间无法直接运算的问题 (str转datetime的方法)
  16. windows7环境下theano安装
  17. 【OR】二次规划(2):SCA方法
  18. PCB射频电路四大基础特性
  19. [好文!!!]pyecharts实现星巴克门店分布可视化分析
  20. vue 启动没有不支持ip,只能localhost

热门文章

  1. 一起来做个CH347的项目(应用于FPGA、CPLD、MCU)
  2. Ubuntu 16.04安装sogou拼音输入法
  3. inventor 波纹阵列_Inventor装配零部件阵列功能详解
  4. 什么是带内管理 带外管理?
  5. windows 逆向技术必备知识(书籍)
  6. CSS媒体查询(@media)全面解析
  7. 【Google Play】Google Play 签名维护 ( 签名机制 | Google Play 签名机制选择 | 签名更新 )
  8. 对抗样本(五)DeepFool
  9. linux的syn攻击软件,linux 防御SYN攻击步骤详解
  10. 微信小程序之在线任务发布与接单平台