题目链接: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. 【托业】【新东方托业全真模拟】TEST05~06-----P5~6

    credit A with B 把A归功于B present A with B 给A赠送B proofread thoroughly 彻底地校对:exclusively 专门地:独占地:apparen ...

  2. JDBC 和连接池

    1 JDBC概述 Java DataBase Connectivity,Java数据库连接,一种执行SQL的Java API,为多种关系数据库提供统一访问规范,由一组Java语言编写的类和接口组成.数 ...

  3. [svc]共享内存

    ipc是什么? 进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法. 进程间为何不能直接共享数据? 如何解决ipc问题? ...

  4. Linux下安装pymysql

    直接使用pip进行安装: [root@mycentos ~]#pip install pymysql

  5. nuxtjs中使用路由守卫

    在vue中的路由守卫一般是来验证token失效什么的,当然也可以设置权限啦,在nuxtjs中如何使用路由守卫呢,话不多说,直接上代码 在plugins目录下简历route.js export defa ...

  6. Nginx 多域名配置

    nginx绑定多个域名可又把多个域名规则写一个配置文件里,也可又分别建立多个域名配置文件,我一般为了管理方便,每个域名建一个文件,有些同类域名也可又写在一个总的配置文件里.一.每个域名一个文件的写法  ...

  7. windows 允许其他电脑访问本地mysql数据库

    第一步:用ping命令测试两台电脑是否连通 如果两台电脑是连通的请转到第二步,如果是非连通的请进行如下操作: 1.进入控制面板,打开Windows Defender 防火墙,点击高级设置(本人用的是W ...

  8. Java web开发环境搭配

    1.安装并配置JDK环境(1)安装过程省略(建议安装在自己指定的统一目录下,方便后期查找). (2)配置环境变量 JAVA_HOME:  C:\Java\jdk\jdk1.7.0_45 (jdk安装目 ...

  9. Eclipse安装svn插件的几种方式(转)

    1.在线安装: (1).点击 Help --> Install New Software... (2).在弹出的窗口中点击add按钮,输入Name(任意)和Location(插件的URL),点击 ...

  10. PriorityQueue 源码分析

    public boolean hasNext() { return cursor < size || (forgetMeNot != null && !forgetMeNot.i ...