愿天下有情人都是失散多年的兄妹(bfs)
L2-016. 愿天下有情人都是失散多年的兄妹
呵呵。大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人、父母、祖父母、曾祖父母、高祖父母)则不可通婚。本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚?
输入格式:
输入第一行给出一个正整数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
- 大部分人的做法:思路:用map存节点,键是本人ID,值是个人信息,判断两个人是否能通婚,先标记一个人的五服,然后查找另一个人的五服,看是否能找到标记,如果能就说明两个人在五服之内。
我的做法:比较类似,建单边,最多跑5次队列
注意:父母也可能作为测试对象,性别需手动确定。被坑了
- #include<iostream>
- #include<cstring>
- #include<string>
- #include<queue>
- #include<algorithm>
- using namespace std;
- struct node
- {
- int v;
- int nxt;
- }e[];
- int head[];
- int p[];
- int vis[];
- int b[];
- queue<int>q;
- int cnt=;
- void add(int u,int v)
- {
- e[cnt].v=v;
- e[cnt].nxt =head[u];
- head[u]=cnt++;
- }
- int bfs(int u,int v)
- {
- q.push (u);
- q.push(v);
- b[u]=;
- b[v]=;
- while(!q.empty ())
- {
- int x=q.front ();q.pop();
- /*cout<<x<<" "<<b[x]<<endl;*/
- if(b[x]>) return ;
- for(int i=head[x];i!=-;i=e[i].nxt)
- {
- int y=e[i].v;
- if(!vis[y])
- {
- b[y]=b[x]+;
- vis[y]=;
- q.push(y);
- }
- else
- {
- if(b[y]==) return ;
- else return ;
- }
- }
- }
- return ;
- }
- int main()
- {
- int n;
- cin>>n;
- memset(head,-,sizeof head);
- for(int i=;i<=n;i++)
- {
- int x;
- char c;
- int a,b;
- cin>>x>>c>>a>>b;
- if(c=='F') p[x]=;
- else p[x]=;
- if(a!=-)
- {
- add(x,a);
- p[a]=;//父母性别确定
- }
- if(b!=-)
- {
- add(x,b);
- p[b]=;//父母性别确定
- }
- }
- cin>>n;
- for(int i=;i<=n;i++)
- {
- int u,v;
- while(!q.empty ()) q.pop();
- memset(vis,,sizeof vis);
- memset(b,,sizeof b);
- cin>>u>>v;
- if(p[u]==p[v]) cout<<"Never Mind";
- else
- {
- int num=bfs(u,v);
- if(num==) cout<<"No";
- else cout<<"Yes";
- }
- if(i!=n) cout<<endl;
- }
- }
愿天下有情人都是失散多年的兄妹(bfs)的更多相关文章
- 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 GPLT L2-016 愿天下有情人都是失散多年的兄妹
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216 分析:一开始以为是并查集..... ...
- PAT L2-016 愿天下有情人都是失散多年的兄妹
https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216 呵呵.大家都知道五服以内不得通婚,即两个人最 ...
- PAT L2-016 愿天下有情人都是失散多年的兄妹(深搜)
呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...
- 【PTA 天梯赛】L2-016. 愿天下有情人都是失散多年的兄妹(深搜)
呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...
- L2-016 愿天下有情人都是失散多年的兄妹(25 分)
呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...
- PAT 天梯赛练习集 L2-016. 愿天下有情人都是失散多年的兄妹
题目链接:https://www.patest.cn/contests/gplt/L2-016 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母. ...
随机推荐
- JSP JavaBeans
Javabean的设计原则 公有类 无参公有构造方法 私有属性 getter和setter方法 在Jsp页面中如何使用Javabeans? 像使用普通Java类一样,创建JavaBeans实例. 在J ...
- mysql里的ibdata1文件
mysql大多数磁盘空间被 InnoDB 的共享表空间 ibdata1 使用.而你已经启用了 innodb_file_per_table,所以问题是: ibdata1存了什么? 当你启用了innodb ...
- 在Windows下使用adb logcat grep
在Windows下使用adb logcat grep 会提示 因为grep 为Linux命令,所以不能使用.怎么办呢? 这时候可以用到babun 下载地址:http://babun.github.i ...
- php特级课---2、网站大数据如何存储
php特级课---2.网站大数据如何存储 一.总结 一句话总结: mysql主从,分库分表,mysql分区,mysql集群,Nosql 1.mysql主从服务器各自的功能是什么? 增删改,主服务器 查 ...
- 伪Excel导出新版代码
/// <summary> /// 导出Excel CreateExcel(ds, "统计表.xls",new int[]{6,8}); /// </summar ...
- EF切换到Mysql数据库,更改web.config
1)引用: MySql.Data.dll,MySql.Data.Entity.dll,MySql.Data.Entity.EF6.dll 2)添加: <system.data> <D ...
- os.path.abspath()的作用
语法 os.path.abspath(path) 作用 返回绝对路径 实例 import os print(os.path.abspath(".")) #当前目录的绝对路径 pri ...
- hdu 2149 Public Sale(bash)
Public Sale Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 大视野 1012: [JSOI2008]最大数maxnumber(线段树/ 树状数组/ 单调队列/ 单调栈/ rmq)
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 9851 Solved: 4318[Submi ...
- android实现异步的问题小经验总结
1.如下图所言,必须在UI线程中调用异步任务的子类 2.经过碰壁 测试 --.方法一中 @Override public void onClick(DialogInterface dialog, in ...