pta l2-16(愿天下有情人都是失散多年的兄妹)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216
题意:两个异性的人五服之内不得通婚,给出n个人的信息,包括id、性别、父母id(父母不可考的为-1),给出k组询问,若两个人同性,输出"Never Mind“,异性可通婚输出Yes,异性不可通婚输出No。
思路:看完题就感觉是个并查集的题,然后一直在往并查集这个方向想,可是怎么也想不到怎么处理五代之内的祖先的问题,无奈去查了下,看到别人的思路是dfs,醍醐灌顶,对啊,数据这么小,直接搜索两个人的五代之内的祖先有没有交集不就行了,唉,还是做的题目太少了,容易局限于一个角度。
好了,回归题目,这个题目有个很坑的地方,输入的询问可能会问到没有出现的id,这种情况就不会有近亲的可能,但不知道其性别,所以其性别可M可F。因为id为5位,我们1e5+5大小的结构体数组就可存所有人的信息了,结构体中包含性别,父母id,因为上面提到其性别可能出现3种情况,因此用0表示可M可F,用1表示M,用2表示F;父母id初始化为-1,输入个人信息的时候要注意要同时初始化其父母的性别,父为M,母为F。回答询问时若出现未出现的人直接输出”Yes“,若两人性别相同输出”Never Mind“(^_^),最后一种为异性情况,用dfs1搜索t1五代以内的祖先,保存在set中,用dfs2搜索t2五代以内的祖先,若有交集令flag=1,否则flag=0,然后输出相应的信息即可。
AC代码:
#include<bits/stdc++.h>
using namespace std; struct node{
int sex,fa,ma;
}a[]; int n,k,t1,t2,t3,flag;
char c;
set<int> s; void dfs1(int p,int num){
if(num>=) return;
int ff=a[p].fa,mm=a[p].ma;
if(ff>=){
s.insert(ff);
dfs1(ff,num+);
}
if(mm>=){
s.insert(mm);
dfs1(mm,num+);
}
} void dfs2(int p,int num){
if(num>=) return;
int ff=a[p].fa,mm=a[p].ma;
if(s.count(ff)||s.count(mm)){
flag=;
return;
}
if(ff>=){
dfs2(ff,num+);
if(flag) return;
}
if(mm>=){
dfs2(mm,num+);
if(flag) return;
}
} int main(){
scanf("%d",&n);
for(int i=;i<;++i)
a[i].fa=a[i].ma=-;
while(n--){
scanf("%d %c%d%d",&t1,&c,&t2,&t3);
a[t1].sex=(c=='M')?:;
a[t1].fa=t2,a[t1].ma=t3;
a[t2].sex=;
a[t3].sex=;
}
scanf("%d",&k);
while(k--){
scanf("%d%d",&t1,&t2);
if(!a[t1].sex||!a[t2].sex)
printf("Yes\n");
if(a[t1].sex==a[t2].sex)
printf("Never Mind\n");
else{
flag=;
s.clear();
dfs1(t1,);
dfs2(t2,);
if(flag)
printf("No\n");
else
printf("Yes\n");
}
}
return ;
}
pta l2-16(愿天下有情人都是失散多年的兄妹)的更多相关文章
- PAT L2-016. 愿天下有情人都是失散多年的兄妹 (BFS)
L2-016. 愿天下有情人都是失散多年的兄妹 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 呵呵.大家都知道五服以内不得通婚 ...
- L2-016. 愿天下有情人都是失散多年的兄妹(深搜)*
L2-016. 愿天下有情人都是失散多年的兄妹 参考博客 #include<iostream> #include<cstdio> #include<cstring> ...
- L2-016 愿天下有情人都是失散多年的兄妹
L2-016 愿天下有情人都是失散多年的兄妹 (25 分) 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你 ...
- 愿天下有情人都是失散多年的兄妹(bfs)
L2-016. 愿天下有情人都是失散多年的兄妹 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 呵呵.大家都知道五服以内不得通婚 ...
- 【PTA 天梯赛】L2-016. 愿天下有情人都是失散多年的兄妹(深搜)
呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...
- PAT L2-016 愿天下有情人都是失散多年的兄妹
https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216 呵呵.大家都知道五服以内不得通婚,即两个人最 ...
- PAT L2-016 愿天下有情人都是失散多年的兄妹(深搜)
呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...
- L2-016 愿天下有情人都是失散多年的兄妹(25 分)
呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...
- PAT 天梯赛练习集 L2-016. 愿天下有情人都是失散多年的兄妹
题目链接:https://www.patest.cn/contests/gplt/L2-016 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母. ...
随机推荐
- Angular.js实现分页
一.编写angularJS实现的分页js(网上搜)和样式表(pagination),并在页面引入 二.编写变量和方法 //分页控件控制 $scope.paginationConf={ currentP ...
- python的type class
在python中,用户定义的class是一个PyTypeObject ( XXX_Type)对象. #PyType_Type是一切类的基类,这是一个全局数据PyTypeObject PyType_Ty ...
- python大法好——修改文件、函数
1.修改文件 补充上次没洗完的: 想要修改某个文件里一块地方,可以使用seek函数找到位置write函数修改. 是不是觉得这很简单? 但是如果你这样操作很可能会出现乱码. 因为由于字节数的不同,编码的 ...
- leetcode1004
class Solution: def getMax(self,B:'List[int]'): n = len(B) maxlen = 0 curlen = 0 for i in range (n): ...
- ORM一对多查询对象
正向查询: 取人民日报出版社出版的所有书籍 方式一: pub_obj = Publish.objects.filter(name='人民日报')[0] ret = Book.objects.filte ...
- echarts-颜色渐变
图形的颜色. 默认从全局调色盘 option.color 获取颜色 颜色可以使用 RGB 表示,比如 'rgb(128, 128, 128)',如果想要加上 alpha 通道表示不透明度,可以使用 R ...
- pandas 笔记
删除: del df["A"] # 原地修改 df.drop("a") # 返回修改后的新对象 df.drop(["a", " ...
- 命名空间与use
以下是自己读PHP手册命名空间这一节的一些笔记,还有自己上机做命名空间测试的一些整理,原创博客,有错欢迎指正: 1.命名空间声明必须是第一条语句,若没有声明命名空间的脚本,则被认为是全局空间的脚本.若 ...
- Object-c 协议@protocol(@required、@optional)
一.什么是协议? 1.协议声明了可以被任何类实现的方法2.协议不是类,它是定义了一个其他对象可以实现的接口3.如果在某个类中实现了协议中的某个方法,也就是这个类实现了那个协议.4.协议经常用来实现委托 ...
- mac使用brew安装sshpass
brew安装sshpass brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Form ...