PAT 天梯赛 L2-016. 愿天下有情人都是失散多年的兄妹 【BFS】
2018-03-21 22:23
519 查看
题目链接
https://www.patest.cn/contests/gplt/L2-016
思路
用BFS 每层 遍历当代 并且查找当代是否有重复 有重复就跳出 然后 POP 并且将他们的下一代 压入 队列
但是有一个点 要注意
就是 如果存在两个人 他们的上一代 都不可考
那么就默认没有血缘关系
那么就要根据 性别来判断
如果 这两个人 是出现在 某个人的父亲 或 母亲中呢 所以在输入的时候 对于父亲和母亲的性别是没有标记的 那么就会出错
所以要加入 父亲和母亲的性别标记
其实还有种简单的方法 就是用SET就可以了 两个 分别压入 然后判断 SET的大小有没有改变 如果没有改变 就是有重复
或者 用数组标记
AC代码
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"); } } }
相关文章推荐
- L2-016. 愿天下有情人都是失散多年的兄妹-PAT团体程序设计天梯赛GPLT(广度优先bfs)
- L2-016. 愿天下有情人都是失散多年的兄妹-PAT团体程序设计天梯赛GPLT
- 天梯赛练习题 L2-016. 愿天下有情人都是失散多年的兄妹 (bfs)
- 团体程序设计天梯赛-练习集 L2-016. 愿天下有情人都是失散多年的兄妹(BFS)
- 团体程序设计天梯赛-练习集 L2-016. 愿天下有情人都是失散多年的兄妹 解题报告
- 天梯赛L2-016愿天下有情人都是失散多年的兄妹
- 天梯赛决赛l2-016 愿天下有情人都是失散多年的兄妹
- PAT L2-016. 愿天下有情人都是失散多年的兄妹
- 团体程序设计天梯赛L2-016 愿天下有情人都是失散多年的兄妹
- 团体程序设计天梯赛-练习集-L2-016. 愿天下有情人都是失散多年的兄妹(dfs)
- PAT团队赛 L2-016. 愿天下有情人都是失散多年的兄妹
- pat L2-016. 愿天下有情人都是失散多年的兄妹(dfs)
- 团体程序设计天梯赛-练习集 L2-016. 愿天下有情人都是失散多年的兄妹 解题报告
- PAT-L2-016(愿天下有情人都是失散多年的兄妹)
- PAT L2 016 愿天下有情人都是失散多年的兄妹
- ACM天梯赛 L2-016. 愿天下有情人都是失散多年的兄妹
- 【L2-016】愿天下有情人都是失散多年的兄妹【DFS 遍历】
- L2-016. 愿天下有情人都是失散多年的兄妹
- L2-016. 愿天下有情人都是失散多年的兄妹
- L2-016. 愿天下有情人都是失散多年的兄妹