L2-016 愿天下有情人都是失散多年的兄妹 CCCC

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

输入格式:

输入第一行给出一个正整数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
题解:要求五服以内不得通婚,那么判断两个异性是否在五服以内,只需要将他们各自五服以内的亲人找出来,然后判断是否有重复就好了,用bfs来寻找五服,

当depth >= 4的时候直接结束循环就好了。判断重复的方法可以是两次bfs,然后把得到的5服放入set里面,看有没有重复。当然还有更快的方法,就是我们先dfs第一个人的五服,在depth数组里,给他的五服以内亲人打上标记,然后dfs第二个人,在dfs的过程中,如果遇到亲人在depth已经被打上标记了,那么说明他俩是近亲结婚,输出No,否则,输出Yes

思路很简单,但是这个题目有坑,就是当要询问的两个有情人是某个人的父母,而不是单独给出的时候,那么,用上述算法将得到错误的答案,因此为我们在读入N个人的信息的时候,需要特殊处理一下,即当某个人的父母没有单独给出的时候,我们把f[父] = m[父] = -1;f[母] = m[母] =-1;经过这个处理以后,可以经过所有数据

#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
#include <queue>
using namespace std;
const int MAXN = 100005;
int ext[MAXN];
int sex[MAXN],f[MAXN],m[MAXN]; 
int N;
int depth[MAXN];
int main()
{scanf("%d",&N);for(int i = 0;i < N;i++){int idf,idm,idi;char s;scanf("%d %c %d%d",&idi,&s,&idf,&idm);ext[idi] = 1;//idi是单独给出的标志sex[idi] = s == 'F'?1:0;f[idi] = idf;if(idf != -1) {sex[idf] = 0;if(!ext[idf]) m[idf] = f[idf] = -1;//若父亲没有被单独的给出,那么要默认设置父亲的父母为-1}m[idi] = idm;if(idm != -1) {sex[idm] = 1;	if(!ext[idm]) m[idm] = f[idm] = -1;}}	int Q;scanf("%d",&Q);while(Q--){int a,b;scanf("%d%d",&a,&b);if(sex[a] == sex[b]){puts("Never Mind");continue;}else if(f[a] == b || m[a] == b || f[b] == a || m[b] == a){puts("No");continue;}	else{memset(depth,0,sizeof(depth));queue<int> q;q.push(a);while(!q.empty()){int v = q.front();q.pop();if(depth[v] >= 4) break; //这样五服内最高亲属下标就是4 if(m[v] != -1) {depth[m[v]] = depth[v] + 1;if(ext[m[v]]) q.push(m[v]);}if(f[v] != -1){depth[f[v]] = depth[v] + 1;if(ext[f[v]]) q.push(f[v]);} }while(!q.empty()) q.pop();q.push(b);int flag = 1;while(!q.empty()){int v = q.front();q.pop();if(depth[v] >= 4) break; if(depth[m[v]] || depth[f[v]]){flag = 0;break;}else{if(m[v] != -1) {depth[m[v]] = depth[v] + 1;if(ext[m[v]]) q.push(m[v]);}if(f[v] != -1){depth[f[v]] = depth[v] + 1;if(ext[f[v]]) q.push(f[v]);} }}if(flag) puts("Yes");else puts("No");}} 
}
/*
3
1 M -1 -1
2 F 3 -1
4 M 3 -11
1 M 2 3
1 
2 3
*/




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot2.1.9 多MongoDB配置自动扫描

一、配置文件 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> application.yml spring:application:name: double-mongoprofiles:active…

SignalR Core尝鲜

要点SignalR Core改用Microsoft.AspNetCore.Sockets&#xff0c;不再依赖HTTP。使用MessagePack序列化格式&#xff0c;支持二进制协议。TypeScript客户端移除了第三方依赖包。支持WebSocket原生客户端&#xff0c;可以使用自己构建的客户端连接到SignalR服务器。伸缩方式更灵活…

2016陕西省ACM省赛 HE 字符串处理 删除注释

HE 发布时间: 2017年3月27日 18:28 最后更新: 2017年3月27日 18:30 时间限制: 1000ms 内存限制: 256M 描述 "Hi there, my name is HE." 在某个秘密的计算机实验室中&#xff0c;超级人工智能计算机 HE 诞生了。 HE 可以在网络中搜索合适的程序代码进行自我升级…

SpringBoot2.1.9 MongoDB逻辑操作

一、基础类配置 NoRepositoryBean public interface IMongoRepository<T, ID> extends MongoRepository<T, ID> {String getTableName();void deleteAll(Collection<ID> ids);MongoOperations getMongoOperations();MongoEntityInformation<T, ID> ge…

牛客-Forsaken喜欢独一无二的树【并查集,最小生成树】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1221/H 题目大意 给一张图&#xff0c;要求删掉一些边使得最小生成树权值不变&#xff0c;然后求删掉的边的最小权值。 解题思路 我们假设能够构成最小生成树的边权之和为sumsumsum&#xff0c;最小生成树的边权之和为kk…

2016陕西省ACM 热身体B 种类并查集

Energy 发布时间: 2017年3月27日 11:31 最后更新: 2017年3月27日 18:30 时间限制: 1000ms 内存限制: 256M 描述 人类准备发射载人飞船前往火星。 飞船使用了一种特殊的反物质燃料来作为动力&#xff0c;在飞船的制造期间&#xff0c;同时人类也在从宇宙 的各个地方收集这…

P2519-[HAOI2011]problem a【dp】

正题 题目链接:https://www.luogu.org/problem/P2519 题目大意 nnn个人&#xff0c;第iii个人说aia_iai​个人比他高&#xff0c;bib_ibi​个人比他低&#xff0c;允许有相同分数&#xff0c;求最少多少人在说谎。 解题思路 我们改为求最多有多少人在说真话&#xff0c;我们发…

kubernetes实践之运行aspnetcore webapi微服务

1、预备工作unbuntu 16.04 or abovedocker for linuxkubernetes for linux 集群环境2、使用vs2017创建一个web api应用程序&#xff0c;并打包镜像到本地。3、推送本地镜像到docker hub4、编写k8s资源配置文件(yml)hello-world-deployment.yml如下上面replicas部署两个副本实例…

2016陕西省省赛 ACM Rui and her functions B 二分

Rui and her functions 发布时间: 2017年3月27日 15:45 最后更新: 2017年3月28日 12:43 时间限制: 10000ms 内存限制: 256M 描述 Rui is magnificently gifted. Why does she not play with me tonight? Oh, she is obsessing about nfunctions with nquartette of posi…

使用.NET Core快速开发一个较正规的命令行应用程序

一般命令行程序包含什么&#xff1f;使用方式帮助信息子命令参数选项帮助信息帮助信息如上&#xff0c;介绍了命令的作用和参数、选项作用。这个是必不可少的。子命令一个应用程序打包了多个功能&#xff0c;这时候就可以使用子命令&#xff0c;比如 dotnet ef migrations&…

牛客-乃爱与城市拥挤程度【树形dp】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1100/B 题目大意 nnn个点的一棵树&#xff0c;对于每个点求 距离该点不超过kkk的点数每个点的权值是以该点为起点长度所有不超过kkk的路径覆盖该点的次数&#xff0c;求所有点的乘积 解题思路 对于第一问我们先考虑在子树…

SpringBoot2.1.9 MongoDB的聚合连接

LookupOperation lookupOperation LookupOperation.newLookup().from(AdminRepository.instance().getTableName()). //关联从表名localField(User.Fields.name). //主表关联字段foreignField(Admin.Fields.name).//从表关联的字段as("adminInfo"); //查询结果…

节操大师 北方大学生程序设计竞赛 南开大学

Description MK和他的小伙伴们&#xff08;共n人&#xff0c;且保证n为2的正整数幂&#xff09;想要比试一下谁更有节操&#xff0c;于是他们组织了一场节操淘汰赛。他们的比赛规则简单而暴力&#xff1a;两人的节操正面相撞&#xff0c;碎的一方出局&#xff0c;而没碎的一方晋…

牛客-仓鼠的石子游戏【博弈论】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1100/A 题目大意 nnn个环&#xff0c;第iii个环有aia_iai​个珠子。要求涂色时没有相邻的同色。 两个人轮流涂色&#xff0c;直到一个人无法涂色为止。 解题思路 其实先手后手的胜利与他们的操作没有任何关系。 考虑一个…

Window7 docker安装

一、下载docker toolbox docker-toolbox-windows-docker-toolbox安装包下载_开源镜像站-阿里云 -ce后缀的是免费的版本&#xff0c;其他是收费版本 二、安装 安装完成即可 三、启动docker 双击 Docker Quickstart Terminal启动 其他问题&#xff1a; 启动拉boot2docker镜像失…

aspnetcore.webapi实践k8s健康探测机制 - kubernetes

1、浅析k8s两种健康检查机制Liveness k8s通过liveness来探测微服务的存活性&#xff0c;判断什么时候该重启容器实现自愈。比如访问 Web 服务器时显示 500 内部错误&#xff0c;可能是系统超载&#xff0c;也可能是资源死锁&#xff0c;此时 httpd 进程并没有异常退出&#xff…

dp 树状数组 逆序元组

wmq的队伍 发布时间: 2017年4月9日 17:06 最后更新: 2017年4月9日 17:07 时间限制: 2000ms 内存限制: 512M 描述 交大上课需要打卡&#xff0c;于是在上课前的几分钟打卡机前往往会排起长队。 平时早睡早起早早打卡的wmq昨晚失眠&#xff0c;今天起晚了&#xff0c;于是他…

牛客-服务器需求【线段树】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1101/A 题目大意 nnn天第iii天需要aia_iai​台机器&#xff0c;每台机器可以工作mmm天。qqq次修改&#xff0c;每次修改一个aia_iai​&#xff0c;求每次修改后至少需要雇佣多少台机器。 解题思路 很容易想到答案就是max{…

快速搭建CentOS+ASP.NET Core环境支持WebSocket

以前用python&#xff0c;go尝试在linux下做web服务&#xff0c;python没有强类型支持与高性能&#xff0c;go又没有很好的集成开发环境&#xff08;还有强迫症的语法&#xff09;&#xff0c;回头看了几次.net&#xff0c;都没有时间尝试&#xff0c;现终于实现了这些想法&…

博客文章列表(一)——JAVA

一、成长系列 面试 详情列表 编程难题 详情列表 java总结 详情列表 java技能 详情列表 java面…