[HDU1272]小希的迷宫[并查集]
来源:互联网 发布:淘宝卖弓犯法吗 编辑:程序博客网 时间:2024/06/11 23:39
题目链接:[HDU1272]小希的迷宫[并查集]
题意分析:小希的迷宫需要满足:1.每条路之间都是联通的;2.地图中不能出现回路。只要满足上述条件就输出『Yes』,否则『No』。
解题思路:赤裸裸的并查集- -。注意坑点:有可能给出多个不联通的地图集合,所以在输出结果前要判断一下是否有多个地图集合。
个人感受:坑坑的我没有发现有多个集合这种事情TAT
具体代码如下:
#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 100010;int p[MAXN], ran[MAXN]; //ran用于表示节点高度,默认低节点向高节点合并bool vis[MAXN]; //记录该点是否为地图中的点void init() //初始化并查集{ for (int i = 1; i < MAXN; ++i) p[i] = i, ran[i] = 0; memset(vis, 0, sizeof(vis));}int find(int x){ if (p[x] == x) return x; else return p[x] = find(p[x]);}void unit(int a, int b){ int x = find(a), y = find(b); if (ran[x] < ran[y]) p[x] = y; else{ p[y] = x; if (ran[x] == ran[y]) ++ran[x]; }}int main() { ios_base::sync_with_stdio(0); int a, b; bool flag = 1; init(); while (cin >> a >> b && a != -1) { vis[a] = 1, vis[b] = 1; if (a == 0) { int coun = 0; //输出结果前判断是否有多个集合存在。 for (int i = 1; i < MAXN; ++i) if (vis[i] && i == p[i]) ++coun; if (coun > 1) flag = 0; cout << (flag == 0 ? "No":"Yes") << '\n'; flag = 1; //重新初始化 init(); } else { if (find(a) != find(b)) unit(a, b); else { flag = 0; } } } return 0;}
0 0
- hdu1272(小希迷宫 并查集)
- HDU1272 小希的迷宫 并查集
- 【hdu1272】 小希的迷宫 (并查集)
- 小希的迷宫 hdu1272 并查集
- hdu1272小希的迷宫(并查集)
- 【并查集】-HDU1272-小希的迷宫
- hdu1272小希的迷宫 基础并查集
- hdu1272 小希的迷宫(并查集)
- hdu1272 小希的迷宫(并查集)
- HDU1272小希的迷宫--并查集入门题
- HDU1272 小希的迷宫 【并查集】
- Hdu1272 - 小希的迷宫 - 并查集
- HDU1272 小希的迷宫 (并查集)
- HDU1272 小希的迷宫(基础并查集)
- hdu1272 - 小希的迷宫 (基础并查集)
- hdu1272 -- 小希的迷宫(并查集)
- hdu1272小希的迷宫(并查集)
- HDU1272 小希的迷宫 并查集
- JAVA设计模式(20):行为型-备忘录模式(Memento)
- Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}
- python Socket 传送简易数据
- C++中虚基类
- 高性能服务端漫谈
- [HDU1272]小希的迷宫[并查集]
- 第三章第41题
- 用L脚本语言开发一个简单的局域网聊天程序
- Count Primes
- 【MFC】BROWSEINFO结构设置文件夹文件路径 方法学习与分享!
- Windows消息:WM_USER与WM_APP的区别
- 简易的图片保存脚本
- filter过滤
- 黑马程序员_07. 包和访问权限及内部类和匿名内部类