PAT 天梯赛 L2-016. 愿天下有情人都是失散多年的兄妹 【BFS】
题目链接
https://www.patest.cn/contests/gplt/L2-016
思路
用BFS 每层 遍历当代 并且查找当代是否有重复 有重复就跳出 然后 POP 并且将他们的下一代 压入 队列
但是有一个点 要注意
就是 如果存在两个人 他们的上一代 都不可考
那么就默认没有血缘关系
那么就要根据 性别来判断
如果 这两个人 是出现在 某个人的父亲 或 母亲中呢 所以在输入的时候 对于父亲和母亲的性别是没有标记的 那么就会出错
所以要加入 父亲和母亲的性别标记
其实还有种简单的方法 就是用SET就可以了 两个 分别压入 然后判断 SET的大小有没有改变 如果没有改变 就是有重复
或者 用数组标记
AC代码
#include <cstdio>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <map>
#include <stack>
#include <set>
#include <numeric>
#include <sstream>
#include <iomanip>
#include <limits>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef pair<string, int> psi;
typedef pair<string, string> pss;
const double PI = 3.14159265358979323846264338327;
const double E = exp(1);
const double eps = 1e-6;
const int INF = 0x3f3f3f3f;
const int maxn = 1e6 + 5;
const int MOD = 1e9 + 7;
map <int, pii> m;
map <int, int> judge[2];
queue <int> q[2];
int ans;
void bfs(int cur)
{
if (cur == 7)
return;
for (int i = 0; i < 2; i++)
{
judge[i].clear();
while (!q[i].empty())
{
int num = q[i].front();
q[i].pop();
if (num != -1)
judge[i][num] = 1;
}
}
map <int, int>::iterator it;
for (it = judge[0].begin(); it != judge[0].end(); it++)
{
if (judge[1][it->first])
{
ans = cur;
return;
}
else
judge[1].erase(it -> first);
}
for (int i = 0; i < 2; i++)
{
for (it = judge[i].begin(); it != judge[i].end(); it++)
{
if (m[it->first].first != -1)
q[i].push(m[it->first].first);
if (m[it->first].second != -1)
q[i].push(m[it->first].second);
}
}
bfs(cur + 1);
}
int main()
{
map <int, int> vis, opt;
int n;
scanf("%d", &n);
int a, b, c, d;
char code;
for (int i = 0; i < n; i++)
{
scanf("%d %c %d %d", &a, &code, &b, &c);
opt[a] = 1;
if (code == 'M')
vis[a] = 0;
else
vis[a] = 1;
m[a].first = b;
if (b != -1)
{
if (opt[b] == 0)
{
m[b].first = -1;
m[b].second = -1;
}
vis[b] = 0;
}
m[a].second = c;
if (c != -1)
{
if (opt[c] == 0)
{
m[c].first = -1;
m[c].second = -1;
}
vis[c] = 1;
}
}
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d%d", &a, &b);
if (vis[a] == vis[b])
printf("Never Mind\n");
else
{
while (!q[0].empty())
q[0].pop();
while (!q[1].empty())
q[1].pop();
q[0].push(a);
q[1].push(b);
ans = INT_MAX;
bfs(1);
if (ans > 5)
printf("Yes\n");
else
printf("No\n");
}
}
}
PAT 天梯赛 L2-016. 愿天下有情人都是失散多年的兄妹 【BFS】的更多相关文章
- 【PTA 天梯赛】L2-016. 愿天下有情人都是失散多年的兄妹(深搜)
呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...
- PAT L2-016. 愿天下有情人都是失散多年的兄妹 (BFS)
L2-016. 愿天下有情人都是失散多年的兄妹 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 呵呵.大家都知道五服以内不得通婚 ...
- 愿天下有情人都是失散多年的兄妹(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 分) 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你 ...
- PAT 天梯赛练习集 L2-016. 愿天下有情人都是失散多年的兄妹
题目链接:https://www.patest.cn/contests/gplt/L2-016 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母. ...
- 团体程序设计天梯赛 L2-016. 愿天下有情人都是失散多年的兄妹
同时也要记录父母的性别,输出询问时要用到 #include <stdio.h> #include <stdlib.h> #include <string.h> #i ...
- PAT L2-016 愿天下有情人都是失散多年的兄妹
https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216 呵呵.大家都知道五服以内不得通婚,即两个人最 ...
- PAT L2-016 愿天下有情人都是失散多年的兄妹(深搜)
呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...
随机推荐
- mongo: 改
语法:db.CollectionName.upadte(查询表达式,新值,选项); 查询表达式:定位哪些列是要被修改的列(即使查询表达式能命中多行,默认也只改一行,如果想改多行,可以用multi选项, ...
- Android给力模拟器,秒杀原生模拟器到渣
1 http://www.eoe.cn/news/17433.html?f_section=new&f_section=new 备注:1秒开机,操作超流畅
- angular中通过CSS使下拉列表默认值变灰
angular版本:angular5 先看效果图: drop down的样式是我用CSS样式控制的,没有用插件.想要改变Drop Down List里的默认值的颜色,我的思路是这样的. 在<se ...
- html实现网站全局按钮点击后置灰,不允许连续点击
<script> document.addEventListener("mouseup", upHandler, true); function upHandler(e ...
- Python 多线程和单线程本质应用区别
先了解下CPU的简单运行原理: 它运行速度非常快,1s内可以运行成千上万次,一个核心可以把1s切分成成千上万个时间片段,这个核心确实同时只能运行一个任务:但是可以将多个任务交替执行,比如上一个时间片段 ...
- SpringCloud系列三:将微服务注册到Eureka Server上
1. 回顾 通过上篇博客的讲解,我们知道硬编码提供者地址的方式有不少问题.要想解决这些问题,服务消费者需要一个强大的服务发现机制,服务消费者使用这种机制获取服务提供者的网络信息.不仅如此,即使服务提供 ...
- java之静态代理
© 版权声明:本文为博主原创文章,转载请注明出处 定义: - 为其他对象提供一种代理以控制对这个对象的访问 组成: 抽象角色:通过接口或抽象类声明真正角色实现的业务方法 真实角色:实现抽象角色,定义真 ...
- 图解WinHex使用入门
一 Winhex和相关概念简单介绍 1 Winhex 是在Windows下执行的十六进制编辑软件,此软件功能很强大,有完好的分区管理功能和文件管理功能.能自己主动分析分区链和文件簇链.能对硬盘进行不同 ...
- ArrayList remove注意事项
例子1: List<Integer>list=new ArrayList<>(); list.add(1); list.add(2); list.add(2); list.ad ...
- Win7 设置、访问共享文件夹
一.设置共享文件夹 右键点击文件夹,打开“属性”窗口,选择“共享”选项卡 点击“共享”按钮,打开“文件共享”窗口,在下拉列表中选择账户,点“添加”,最后点“共享”按钮. 二.访问 \\192.168. ...