bfs( L2-016 愿天下有情人都是失散多年的兄妹 (25 分))
这一题巨坑!!!
原题链接
L2-016 愿天下有情人都是失散多年的兄妹 (25 分)
呵呵。大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人、父母、祖父母、曾祖父母、高祖父母)则不可通婚。本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚?
输入格式:
输入第一行给出一个正整数N(2 ≤ N ≤10^4),随后N行,每行按以下格式给出一个人的信息:
本人ID 性别 父亲ID 母亲ID
其中ID是5位数字,每人不同;性别M代表男性、F代表女性。如果某人的父亲或母亲已经不可考,则相应的ID位置上标记为-1。
接下来给出一个正整数K,随后K行,每行给出一对有情人的ID,其间以空格分隔。
注意:题目保证两个人是同辈,每人只有一个性别,并且血缘关系网中没有乱伦或隔辈成婚的情况。
输出格式:
对每一对有情人,判断他们的关系是否可以通婚:如果两人是同性,输出Never Mind;如果是异性并且关系出了五服,输出Yes;如果异性关系未出五服,输出No。
这一题巨坑,刚开始一直有3个测试点没过,很绝望,思路改了又改,一直没有通过。
后来,发现每次输入的时候都需要把父亲和母亲的性别更新一下(这个也是考验我们需要把数据收集完整的意识),因为,当一个人的父亲或者母亲的信息没有在下面的数据给出,那么这个人的父亲和母亲的性别就会没有被保存,如果测试数据中要求你回答这个人父亲或者他的母亲是否可以和别人成为情侣时,就会无法判断这两个人是否是同性还是异性,那么就会有错。
所以,最终我加了两行代码
cp[cp[id].f_m_id[0]].gender = 'M'; cp[cp[id].f_m_id[1]].gender = 'F';
情况就解决了。
、
反思一下自己,也不可以怪pat的测试数据苛刻,其实问题的根源是自己采集数据的过程中 不注意数据的完整性,在以后的工作和学习中,也要学会避免类似的问题发生。
完整代码如下
#include<bits/stdc++.h>
using namespace std;
struct node{char gender;int f_m_id[2] = {-1,-1};
}cp[100000];
int book[100000]={0};
int flag = 0;
int bfs(int id,int time){if(time == 5 ||id == -1 || flag == 1) return 0;book[id] = 1;for(int i = 0 ; i <= 1 ; i++){int f_id = cp[id].f_m_id[i];if(f_id == -1) continue;if(book[f_id] == 0){bfs(f_id,time + 1);}else{flag = 1;return 0;}}if(flag == 1)return 0;return 1;
}
int main(){int n,id,cnt,ch1,ch2;scanf("%d", &n);for(int i = 1; i <= n; i++){scanf("%d", &id);scanf("%s %d %d", &cp[id].gender, &cp[id].f_m_id[0], &cp[id].f_m_id[1]);cp[cp[id].f_m_id[0]].gender = 'M';cp[cp[id].f_m_id[1]].gender = 'F';}scanf("%d", &cnt);while(cnt--){scanf("%d %d", &ch1 ,&ch2);memset(book, 0, sizeof(book));flag = 0;if(cp[ch1].gender == cp[ch2].gender) printf("Never Mind\n");else if(bfs(ch1,0) && bfs(ch2,0)) printf("Yes\n");else printf("No\n");}return 0;
}
bfs( L2-016 愿天下有情人都是失散多年的兄妹 (25 分))相关推荐
- PTA:7-106 愿天下有情人都是失散多年的兄妹 (25分)(bfs,dfs)
7-106 愿天下有情人都是失散多年的兄妹 (25分) 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对 ...
- 天梯赛 L2-016 愿天下有情人都是失散多年的兄妹 (25 分)[测试点1 3 4][未填坑]
L2-016 愿天下有情人都是失散多年的兄妹 (25 分) 思路: 在录入的时候用map和结构体储存性别,父母ID, 判断的时候先判断性别,再用dfs搜索第一个人五服之内的关系,并将关系任务ID存储到 ...
- 天梯赛:L2-016 愿天下有情人都是失散多年的兄妹 (25 分)
题目详情 - L2-016 愿天下有情人都是失散多年的兄妹 (25 分) (pintia.cn) 题解:对于每个给出的编号进行层序遍历,把遍历到的元素存进集合里.如果两个集合存在交集,就代表它们存在公 ...
- 7-57 愿天下有情人都是失散多年的兄妹 (25 分)(深搜)
7-57 愿天下有情人都是失散多年的兄妹 (25 分) 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对 ...
- 【CCCC】L2-016 愿天下有情人都是失散多年的兄妹 (25分),,搜索公共祖先
problem L2-016 愿天下有情人都是失散多年的兄妹 (25分) 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚. ...
- 7-13 愿天下有情人都是失散多年的兄妹 (25 分)
7-13 愿天下有情人都是失散多年的兄妹 (25 分) 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对 ...
- L2-016 愿天下有情人都是失散多年的兄妹 (25 分)(C语言)(并查集)(dfs)(测试点坑)
题目 L2-016 愿天下有情人都是失散多年的兄妹 (25 分) 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请 ...
- 愿天下有情人都是失散多年的兄妹 (25分)
呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...
- 7-4 愿天下有情人都是失散多年的兄妹 (25 分)
呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...
- 7-2 愿天下有情人都是失散多年的兄妹 (25 分)
题目 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: ...
最新文章
- 格式android id,android 获取APP的唯一标识applicationId的实例
- 管理维护MySQL的SQL语句有哪些_MySQL常用管理SQL语句
- 用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传...
- oracle增删控制文件,控制文件的增删改及备份
- VUE:EventHub
- 分布式事务处理--消息发送一致性的异常流程处理
- 比特大陆招股书讲了个AI的故事,但资本市场愿意听吗?
- 马未都说收藏:陶瓷篇(6、7)宋代八大民窑
- Android 接口测方法
- ubuntu安装以及环境配置
- 响应式Web设计:HTML5和CSS3实战 读书笔记
- 51单片机实验——模拟三台机器故障检测与指示系统
- pysot-toolkit--eval.py笔记(读取算法结果,根据评价指标计算结果并可视化)
- 容器CPU使用率过高,导致宿主机load average飙升
- C语言:动态内存分配
- Aspose.Words开发者指南
- 2月YouTube点赞Top10 :BTS防弹少年团回归屠榜!
- 如何把自己写的网站项目发布到网上?
- js图片压缩插件compressorjs
- 输入银行卡号,可以自动识别到银行卡类型的方法
热门文章
- 排序专题——6.桶排序
- [导入]推荐赚钱大师博恩崔西七步成功赚钱公式
- 不适合学计算机的理由,28岁为什么不适合学计算机
- 易维帮助台让IT服务从部门级应用到企业级应用
- Java花鼓保养,自行车花鼓正确保养方法
- 0基础学习VR全景平台篇第46篇:底部菜单- 【开场地图】与【高清矩阵】的对比
- electron Tray 随记
- 【Python 3.7】编写一个名为make_great() 的函数,对魔术师列表进行修改,在每个魔术师的名字中都加入字样“the Great”。
- 某些更新文件缺失或出现问题。我们将尝试稍后重新下载更新。错误代码: (0x80070003)
- 认识计算机中的简单指令集