Uva 10596 - Morning Walk 欧拉回路基础水题 并查集实现【uva数据修改,代码已更新】
来源:互联网 发布:amc分析知乎 编辑:程序博客网 时间:2024/06/08 13:45
题目给出图,要求判断不能一遍走完所有边,也就是无向图,题目分类是分欧拉回路,但其实只要判断度数就行了。
一开始以为只要判断度数就可以了,交了一发WA了。听别人说要先判断是否是联通图,于是用并查集并一起,然后判断是否有多个根。
用dfs的话就是深搜时标记下,最后看看有没有全部标记。我没用dfs做。
今天认真看了题意,以前理解的题意竟然都是错的,网上今年以前的题解貌似都是错的=。=。。。
题目说:In a sunny morning, he was thinking about how it would be if he could visitALL THE ROADS of the city in a single walk.,也就是要求所有路都要找到,而不是所有点都要找到。
这时候只要提前判断下这个点是否在路上再去判断连通性和度数就行了。
代码:
#include <cstdio>const int maxn = 201;int f[maxn];int d[maxn];int find(int x) { if (x != f[x]) return f[x] = find(f[x]); return x;}int main() { int n, r; while (scanf("%d%d", &n, &r) != EOF) { bool ok = 1; int ans = 0; for (int i = 0; i < n; i++) d[i] = 0, f[i] = i; int a, b; for (int i = 0; i < r; i++) { scanf("%d%d", &a, &b); f[find(a)] = find(b); d[a]++; d[b]++; }//for if (r <= 1 || n == 0) ok = 0;int root = find(0); for (int i = 0; ok && i < n; i++)if (d[i] != 0)// 如果该点在路上if (find(i) != root || d[i] % 2 != 0) {// 该点是否跟0点在同个集合 || 度数判断ok = 0;break;}if (ok)printf("Possible\n");elseprintf("Not Possible\n");}//whilereturn 0;}
- Uva 10596 - Morning Walk 欧拉回路基础水题 并查集实现【uva数据修改,代码已更新】
- UVA - 10596 - Morning Walk (欧拉回路!并查集判断回路)
- UVa 10596 - Morning Walk(欧拉回路)
- UVa 10596 Morning Walk ( 欧拉回路 )
- Morning Walk - UVa 10596 欧拉回路
- uva 10596 Morning Walk(欧拉回路)
- UVa 10596 - Morning Walk, 赤裸裸的欧拉回路
- UVA 10596 Morning Walk 简单的k欧拉回路
- uva 10596 Morning Walk(欧拉回路)
- uva 10596 - Morning Walk (欧拉回路~~~)
- UVA - 10596 Morning Walk (欧拉回路+dfs)
- uva 10596 Morning Walk (欧拉回路)
- Morning Walk-uva 经典的欧拉回路
- UVA 10196 Morning Walk(欧拉回路)
- UVa 10596 - Morning Walk 有向图的欧拉回路
- UVa 10596 - Morning Walk(无向图,欧拉回路)
- UVA 10596 Morning Walk[无向图的欧拉回路]
- 10596 - Morning Walk//欧拉回路
- C语言常用基础位操作
- 常见错误集合
- 交叉工具链安装
- IOS越狱开发Hello World
- 使用MediaPlayer和SurfaceView播放视频
- Uva 10596 - Morning Walk 欧拉回路基础水题 并查集实现【uva数据修改,代码已更新】
- hibernate笔记-四大映射
- 大乐必易,大礼必简
- 快速排序
- u—boot 启动 学习
- C#开发Android环境配置
- u-boot 中的汇编指令asr adrl ldr
- 12.5 beep 以及 系统中的延时函数
- 老手是这样教新手编程的