题目

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

输入格式:

输入第一行给出一个正整数N(2 ≤ N ≤104),随后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
结尾无空行

思路

一道比较复杂的模拟题,使用结构体数组保存数据,再模仿二叉树遍历进行两次深搜。

注意点:

  1. 注意所有的数组空间,至少开10610^6106
  2. 结构体数组的所有结点的父亲和母亲都要先设置为不可考,初始化-1
  3. 输入数据中的父亲母亲也要变成结点,并标注性别
  4. 标记五服存储的数组cnt和标记flag,每次循环都要初始化清零,避免影响下一组查询

代码

#include <stdio.h>
#include <string.h>
#define maxsize 100005
struct node
{int sex; //关于性别,1表示M, 2表示Fint fa ; //初始值全为-1,设为父母不可考int mo ;
}Node[maxsize];
int flag; //全局变量标注是否出五服
int cnt[maxsize]; //五服存储
void Find(int id, int num)
{if(num == 4) return;if(Node[id].fa != -1){if(cnt[Node[id].fa] == 1){flag = 1;return;}cnt[Node[id].fa] = 1;Find(Node[id].fa, num+1);}if(Node[id].mo != -1){if(cnt[Node[id].mo] == 1){flag = 1;return;}cnt[Node[id].mo] = 1;Find(Node[id].mo, num+1);}
}
int main()
{int n;scanf("%d", &n);for(int i=0; i<maxsize; i++)Node[i].fa = Node[i].mo = -1;for(int i=0; i<n; i++){int id, father, mother;char x;scanf("%d %c %d %d", &id, &x, &father, &mother);if(x == 'M') Node[id].sex = 1;else if(x == 'F') Node[id].sex = 2;Node[id].fa = father;Node[id].mo = mother;// 父母的相应编号,需要标性别if(father != -1) Node[father].sex = 1;if(mother != -1) Node[mother].sex = 2;}int k;scanf("%d", &k);while (k--){int n1, n2;scanf("%d %d", &n1, &n2);if(Node[n1].sex == Node[n2].sex) printf("Never Mind\n");else{//清零数组及标记memset(cnt, 0 , sizeof(cnt));flag = 0;//分别对以n1, n2为根节点进行遍历搜索Find(n1, 0);Find(n2, 0);if(flag) printf("No\n");else printf("Yes\n");}}return 0;
}

7-2 愿天下有情人都是失散多年的兄妹 (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 分)

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

最新文章

  1. js 生成二维码_QRcode.js 生成二维码
  2. 探讨如何成为技术团队管理者
  3. 登录注册的基本加密方法(可逆)
  4. php如何读取多个url文件,如何从PHP中的URL获取具有相同名称的多个参数
  5. ps作业素材和成品_没有用过PS的画框工具,你还敢说你是设计大佬?
  6. React开发(149):ant design控制是否必填
  7. ug中模型不见了怎么办_关于UG参数化建模的定义
  8. 事务处理与SQL查询
  9. opencv C++ 旋转任意角度图片
  10. 七:如何实现代理与日志清除技术
  11. css如何放大网页字体大小怎么调整,CSS网页设计时关于字体大小的设计
  12. thinkpad 自带软件的设置
  13. 《死亡邮件》评怀疑这是QQ邮箱的推广电影
  14. Mezzanine学习---使用自定义模板
  15. win7家庭版开机登录画面多了一个管理员的账户名
  16. word文档可以打开但显示乱码的完全解决攻略
  17. 约四成的平板和智能手机用户看电视时“一心多用”
  18. 登陆mysql的命令行
  19. xp系统升级Win7系统需要什么条件
  20. Java编程思想笔记——并发3

热门文章

  1. [USACO 4.2.2] The Perfect Stall 完美的牛栏
  2. 【智能车竞赛】第18届比赛规则整理以及往届对比
  3. 太原理工大学计算机专业老师,郝晓燕 - 太原理工大学 - 信息与计算机学院
  4. vue3需要注意的小问题
  5. BFS——1253 胜利大逃亡
  6. arm开发板移植openssl
  7. 一个大专生的java从业心路历程
  8. arcgis 9.3/10.2.2/10.5版本下载
  9. 微信缓存dat怎么转图片_PC微信dat如何转图片?方式方法
  10. 神经网络常用术语(Updating)