题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216

分析:一开始以为是并查集。。。。。没救了,一看到这种亲属关系的就想往并查集靠

用level数组标记层次,在五层前都可以一遍遍的BFS

用个set,每次从队列取出一个数装进集合,没变化就说明重复过了

注意要给父母也标性别,后面可能出现查询两个没有给出全部信息的人能不能结婚,如果父母没有被单独说过的话,我们就默认父母是合法的,性别也要弄清

exist数组就是来看一个人是不是给出了全部信息,如果不是并且性别相异,我们就认为是可行的

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=<<;
const double pi=acos(-);
const int mod=;
const int maxn=1e5+;
const int maxm=;
struct node{
int f,m,sex;
}a[maxn];
bool exist[maxn];
int main(){
int n,id,fa,mo;scanf("%d",&n);
char c;
for(int i=;i<n;i++){
scanf("%d %c %d %d",&id,&c,&fa,&mo);
exist[id]=true;
a[id].f=fa;a[id].m=mo;
if(c=='M') a[id].sex=;
if(c=='F') a[id].sex=;
a[fa].sex=,a[mo].sex=;
}
int k,x,y;scanf("%d",&k);
for(int i=;i<k;i++){
scanf("%d%d",&x,&y);
if(a[x].sex==a[y].sex){
printf("Never Mind\n");
continue;
}
int level[maxn];
queue<int> q;
q.push(x);q.push(y);
level[x]=,level[y]=;
set<int> s;bool flag=;
while(!q.empty()){
int top=q.front();q.pop();
int size=s.size();
s.insert(top);
if(size==s.size()){//插进去一个值却发现集合大小没发生变化,说明另一方曾经插入过
printf("No\n");
flag=;break;
}
if(!exist[top])continue;//说明他不是我们n个id中的一个,不知道他的父母是谁,不用再考虑了
fa=a[top].f,mo=a[top].m;
if(fa!=-&&level[top]<){
q.push(fa);level[fa]=level[top]+;
}
if(mo!=-&&level[top]<){
q.push(mo);level[mo]=level[top]+;
}
}
if(flag) cout<<"Yes\n";
}
return ;
}

BFS GPLT L2-016 愿天下有情人都是失散多年的兄妹的更多相关文章

  1. 愿天下有情人都是失散多年的兄妹(bfs)

    L2-016. 愿天下有情人都是失散多年的兄妹 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 呵呵.大家都知道五服以内不得通婚 ...

  2. PAT L2-016. 愿天下有情人都是失散多年的兄妹 (BFS)

    L2-016. 愿天下有情人都是失散多年的兄妹 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 呵呵.大家都知道五服以内不得通婚 ...

  3. L2-016. 愿天下有情人都是失散多年的兄妹(深搜)*

    L2-016. 愿天下有情人都是失散多年的兄妹 参考博客 #include<iostream> #include<cstdio> #include<cstring> ...

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

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

  5. PAT 天梯赛 L2-016. 愿天下有情人都是失散多年的兄妹 【BFS】

    题目链接 https://www.patest.cn/contests/gplt/L2-016 思路 用BFS 每层 遍历当代 并且查找当代是否有重复 有重复就跳出 然后 POP 并且将他们的下一代 ...

  6. PAT 天梯赛练习集 L2-016. 愿天下有情人都是失散多年的兄妹

    题目链接:https://www.patest.cn/contests/gplt/L2-016 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母. ...

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

    https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216 呵呵.大家都知道五服以内不得通婚,即两个人最 ...

  8. PAT L2-016 愿天下有情人都是失散多年的兄妹(深搜)

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

  9. 【PTA 天梯赛】L2-016. 愿天下有情人都是失散多年的兄妹(深搜)

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

随机推荐

  1. TCP/IP的分层管理

    网络基础TCP/IP 我们通常所使用的网络(包括互联网)均是在TCP/IP协议族的基础上运作的.HTTP属于它内部的一个子集 TCP/IP协议族按层次分为:应用层,传输层,网络层和数据链路层(更好的划 ...

  2. caffe中的卷积

    https://www.zhihu.com/question/28385679 如上,将三维的操作转换到二维上面去做,然后调用GEMM库进行矩阵间的运算得到最后结果. 两个矩阵相乘,需要中间的那个维度 ...

  3. eclipse maven引入第三方jar包后如何下载源代码(sources)

    1. 在eclipse windows -> properties->maven 选项,然后查看右侧 菜单来中 找到 Download Artifact Sources  选项勾选:如果想 ...

  4. 5.0-uC/OS-III时间管理

    1.时间管理 uC/OS-III为用户提供了与时间管理相关的服务. 在uC/OS-III中设置了能提供时基中断的中断源.该中断源提供 10Hz 到 1000Hz 之间的中断(需设置OS_CFG_APP ...

  5. final、finally、finalize区别

    final final关键字可以用来修饰类,方法以及成员变量,当用在不同的场景下时具有不同的意义. 修饰类 如果修饰类,则代表这个类不可继承 修饰方法 如果修饰方法,则代表这个方法不可覆写:同时,允许 ...

  6. slf4j日志使用

    scala中 trait LogSupport { protected val log = LoggerFactory.getLogger(this.getClass) } 需要要到的类 extend ...

  7. JMeter_方案上架,遇到的问题及解决

    问题:手动输入时间接口正确,但是不会在前端展示 解决:发布时间.加入时间设置为服务器时间,服务器时间通过接口自动获取到

  8. 使用PageHelper插件分页结合mybatis返回的列表个数不对问题解决

    问题描述:spring mvc+mybatis项目中,当使用PageHelper插件进行分页查询时,查到的总数据量值是正确的,但是查询当前页返回的列表个数不对.比如每页查询10条,返回2条或者3条.r ...

  9. fiddler学习总结--手机端(APP/微信小程序)抓包

    步骤一.手机和电脑要在同一个局域网中 步骤二.完成fiddler的基本配置,与web端抓包一样: TOOLS-->options-->connections-->1.设置端口:2.勾 ...

  10. 裸奔的bootloader单步调试

    2011-03-01 23:25:22 目地:更清晰的了解bootloader的结构及功能.为移植U-boot打基础. 以前只知道大概,今天利用IAR调试工具,看着汇编代码,看着寄存器,看着内存.来单 ...