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

传送门

这道题就是一个dfs

我们标记从子女开始的五代以内的人,用dfs全部都标记为1.然后在dfs中判断是否有已经标记过的人,如果有,那么说明五代以内有共同的祖先。就可以判断输出了。
这里注意两点:
1.我们标记性别的时候不能简单的0,1标记,因为有些是要你自己判断性别的,题目中不会给,如果因为预处理不当很容易直接把不知道性别的人直接默认为0,实际上赋予了其性别,所以我们可以标记为‘M’ / ‘F’,然后在给出父母ID的时候,也需要把性别标记进去。
注意需要特判为-1,因为数组存储,很容易越界,所以-1不处理。
2.五代以内,在dfs中,判断的条件是>=4就返回,因为每次进入dfs之前,我们已经把当前处理的这一代给标记过了。所以我们当前dfs处理的是下一代,所以到4就得返回。(因为从0开始。)所以4代表着第五代,在num = 4时,我们处理的是第六代的情况。第六代不需要处理,所以直接返回了。

代码部分:

#include <bits/stdc++.h>
#define mst(a, n) memset(a, n, sizeof(a))
using namespace std;
const int N = 1e5 + 10;
const int M = 55;
const int INF = 1e6 + 10;
typedef long long ll;int vis[N];
int n;
char s[N];
vector<int> v[N];
int flag;void dfs(int x, int num)
{if (flag){return ;}if (num >= 4){return ;}for (int i = 0; i < v[x].size(); i++){if (!vis[v[x][i]]){vis[v[x][i]] = 1;dfs(v[x][i], num + 1);}else{flag = 1;}}
}int main()
{cin >> n;while (n--){int t, fa, ma;char sex;scanf ("%d %c %d %d", &t, &sex, &fa, &ma);s[t] = sex;if (fa != -1){v[t].push_back(fa);s[fa] = 'M';} if (ma != -1){v[t].push_back(ma);s[ma] = 'F';}}int k;cin >> k;while (k--){mst(vis, 0);flag = 0;int x, y;scanf ("%d%d", &x, &y);if (s[x] == s[y]){cout << "Never Mind\n";continue;}vis[x] = 1;vis[y] = 1;dfs(x, 0);dfs(y, 0);if (flag){cout << "No\n";}else{cout << "Yes\n";}}return 0;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 第二十五课.元学习MetaLearning
  2. 脑电分析系列[MNE-Python-6]| Python读取.set文件和.locs文件
  3. python从random生成列表_Python 学习DAY 17 列表生成式,生成器,迭代器,time模块,random模块...
  4. 日常使用计算机工具软件,计算机常用工具软件的使用.doc
  5. 源代码的下载和编译:
  6. linux7.0ftp,Linux(Centos7)搭建FTP服务
  7. 《SpringBoot从菜鸟到老鸟》之SpringBoot 如何配置全局的异常捕获
  8. mybatis 查询的时间不对_程序员,Mybatis 你踩过坑吗?
  9. 利用XShell上传、下载文件(使用sz与rz命令) 超实用!
  10. 基于Spring Security角色的访问授权示例
  11. 怎么删除用户_误删的手机照片怎么恢复?三种快速恢复的方法
  12. 94. Binary Tree Inorder Traversal
  13. 遥感原理与应用总结——第一章:遥感原理的基本概念
  14. 【华为OD机试真题 JS】事件推送
  15. 五花八门的垂直搜索引擎
  16. android-c2手机,[视频]最新Android One手机Nokia C2登场:搭载紫光展锐处理器
  17. 【转】PCM Audio,PCM格式音频文件 详解
  18. 程序设计方法学-python
  19. 第8关:判断条件的相容性
  20. 基于Visual C++2010 与office2010开发办公自动化(14)-自定义excel2010工具栏

热门文章

  1. 桌面计算机地址栏在哪,win10系统工具栏怎样添加桌面和地址栏选项【图文教程】...
  2. 染色问题java_java地图路径染色寻找算法
  3. 堆栈stack的基本操作
  4. win10系统蓝牙服务器,如何打开win10系统的蓝牙并进行设备添加
  5. Linked Data_百度百科
  6. 电子罗盘的椭球拟合与椭球变换
  7. docker nginx容器代理bug:upstream server temporarily disabled
  8. 设为首页 加入收藏 html,js设为首页和加入收藏代码(兼容所有浏览器)
  9. python写的一个王者荣耀刷金币脚本
  10. 衣带渐宽终不悔,为伊消得人憔悴