杭电Problem1878 欧拉回路 并查集 + 欧拉回路
来源:互联网 发布:360软件管家界面太大 编辑:程序博客网 时间:2024/05/16 09:03
问题地址
欧拉回路
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11814 Accepted Submission(s): 4348
Problem Description
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?
Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结
束。
束。
Output
每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。
Sample Input
3 31 21 32 33 21 22 30
Sample Output
10
Author
ZJU
对于一个无向图,其为欧拉回路的充要条件为其是连通图,且顶点的度为偶数。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define MAX_N 1005#define MIN(a, b)(a > b): a? busing namespace std;int par[MAX_N];int d[MAX_N];void init(int x){for (int i = 0; i <= x; i++) {par[i] = i;d[i] = 0;}}int find(int x){if (x == par[x])return x;elsereturn find(par[x]);}void unite(int x, int y){int fx = find(x);int fy = find(y);if (fx != fy){par[fy] = fx;}}int main(){int n, m, a, b;while (scanf("%d", &n) , n) {init(n);scanf("%d", &m);for (int i = 0; i < m; i++) {scanf("%d %d", &a, &b);unite(a, b);d[a]++;d[b]++;}int tree = 0;for (int i = 1; i <= n; i++) {if (i == par[i]) {tree++;}}if (tree != 1) {printf("0\n");continue;}for(int i = 1; i <= n; i++) { if(d[i] % 2 != 0) { tree = 0; break; } } if(tree) printf("1\n"); else printf("0\n");}}
0 0
- 杭电Problem1878 欧拉回路 并查集 + 欧拉回路
- 【杭电oj】1878 - 欧拉回路(欧拉回路,并查集)
- 杭电1878欧拉回路 并查集 DFS
- hdu1878欧拉回路【并查集】
- HDU1116(欧拉回路+并查集)
- 并查集+欧拉回路
- hdu3018并查集+欧拉回路
- 欧拉回路-并查集
- 并查集与欧拉回路
- UVa10129(欧拉回路,并查集)
- 欧拉路径,欧拉回路,并查集
- 杭电1116————欧拉回路(通路) + 并查集基础
- hdu 1878 欧拉回路 欧拉回路+并查集
- HDU 1878 欧拉回路 (并查集+欧拉回路)
- HDU 1878 欧拉回路(并查集+欧拉回路)
- hdoj1878欧拉回路(并查集+欧拉回路)
- HDU:1878 欧拉回路(并查集+欧拉回路)
- HDU 1878 欧拉回路(并查集&&欧拉回路)
- 组合索引
- shell基本语法及应用
- Xcode常用的插件
- Eclipse的非矩形图元
- dagger2 让你爱不释手:终结篇
- 杭电Problem1878 欧拉回路 并查集 + 欧拉回路
- Simple way to implement caching in ASP.NET Web API
- 图的遍历
- JAVA 调用Redis接口
- GEF中的锚点Anchor
- 计算几何学习笔记之多边形
- FTP Install
- JavaScrpit生日日期
- 多态与泛型