博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
天梯赛5-12 愿天下有情人都是失散多年的兄妹 【dfs】
阅读量:6453 次
发布时间:2019-06-23

本文共 2757 字,大约阅读时间需要 9 分钟。

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

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

输入格式:

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

本人ID 性别 父亲ID 母亲ID

其中ID是5位数字,每人不同;性别M代表男性、F代表女性。如果某人的父亲或母亲已经不可考,则相应的ID位置上标记为-1

接下来给出一个正整数K,随后K行,每行给出一对有情人的ID,其间以空格分隔。

注意:题目保证两个人是同辈,每人只有一个性别,并且血缘关系网中没有乱伦或隔辈成婚的情况。

输出格式:

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

输入样例:

2400001 M 01111 -100002 F 02222 0333300003 M 02222 0333300004 F 04444 0333300005 M 04444 0555500006 F 04444 0555500007 F 06666 0777700008 M 06666 0777700009 M 00001 0000200010 M 00003 0000600011 F 00005 0000700012 F 00008 0888800013 F 00009 0001100014 M 00010 0999900015 M 00010 0999900016 M 10000 0001200017 F -1 0001200018 F 11000 0001300019 F 11100 0001800020 F 00015 1111000021 M 11100 0002000022 M 00016 -100023 M 10012 0001700024 M 00022 10013900021 0002400019 0002400011 0001200022 0001800001 0000400013 0001600017 0001500019 0002100010 00011

输出样例:

Never MindYesNever MindNoYesNoYesNoNo
建边,先从第一个人开始搜索,因为考虑到伦理,不会出现回溯,访问一个节点就标记下,当第二个人进行dfs的时候遇到第一个人访问的节点的时候,这是就是不可以结婚的情况
注意 每次只在5代之内搜索

 

#include #include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
//#define LOACL#define space " "using namespace std;typedef long long LL;//typedef __int64 Int;typedef pair
paii;const int INF = 0x3f3f3f3f;const double ESP = 1e-5;const double PI = acos(-1.0);const int MOD = 1e9 + 7;const int MAXN = 100000 + 10;bool vis[MAXN];struct node { bool sex; int id;} data[MAXN];bool flag;vector
G[MAXN];void dfs(int x, int n) { //if (x == 10) cout << flag << n << endl; if (flag || !n) return; vis[x] = true; for (int i = 0; i < G[x].size(); i++) { int u = G[x][i]; //cout << u << endl; if (u == -1) continue; if (vis[u]) {flag = true; return;} dfs(u, n - 1); }}int main() { int N; scanf("%d", &N); int a, c, d; char b[2]; for (int i = 0; i < N; i++) { scanf("%d %s %d %d", &a, b, &c, &d); data[a].id = a; data[a].sex = (b[0] == 'M'); data[c].id = c; data[c].sex = true; data[d].id = d; data[d].sex = false; G[a].push_back(c); G[a].push_back(d); } int K; scanf("%d", &K); for (int i = 0; i < K; i++) { scanf("%d%d", &a, &c); if (data[a].sex == data[c].sex) printf("Never Mind\n"); else { memset(vis, false, sizeof(vis)); //cout << "the families of a : " << endl; //cout << "a size is : " << G[a].size() << endl; flag = false; dfs(a, 5); //cout << "the families of b : " << endl; //cout << "b size is : " << G[c].size() << endl; dfs(c, 4); if (flag) printf("No\n"); else printf("Yes\n"); } } return 0;}
 

 

 
 

转载于:https://www.cnblogs.com/cniwoq/p/6770741.html

你可能感兴趣的文章
贪吃蛇java程序简化版_JAVA简版贪吃蛇
查看>>
poi java web_WebPOI JavaWeb 项目 导出excel表格(.xls) Develop 238万源代码下载- www.pudn.com...
查看>>
java 顶点着色_金属顶点着色器绘制纹理点
查看>>
php扩展有哪些G11,php 几个扩展(extension)的安装笔记
查看>>
ajax长连接 php,ajax怎么实现服务器与浏览器长连接
查看>>
oracle报1405,【案例】Oracle报错ORA-15054 asm diskgroup无法mount的解决办法
查看>>
php 5.4.24 win32,PHP 5.4.14 和 PHP 5.3.24 发布
查看>>
oracle top pid,Linux Top 命令解析 比较详细
查看>>
grub如何进入linux系统,Linux操作系统启动管理器-GRUB
查看>>
linux pbs 用户时间,【Linux】单计算机安装PBS系统(Torque)与运维
查看>>
linux系统可用内存减少,在Linux中检查可用内存的5种方法
查看>>
linux 脚本map,Linux Shell Map的用法详解
查看>>
如何在linux系统下配置共享文件夹,如何在windows和Linux系统之间共享文件夹.doc
查看>>
thinkpad装linux无线网卡驱动,ThinkPad E530 Fedora 20 下无线网卡驱动的安装
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>
linux中yum源安装dhcp,24.Linux系统下动态网络源部署方法(dhcpd)
查看>>
linux屏幕复制显示出来的,linux – stdout到gnu屏幕复制缓冲区
查看>>
一起学Shell(十)之可称植性议题与扩展
查看>>
部署Ganglia监控Hadoop&Hbase
查看>>
gitlab的用户使用手册
查看>>