欧拉回路

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 16538    Accepted Submission(s): 6397

Problem Description

欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?

Input

测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结
束。

Output

每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。

Sample Input
3 3
1 2
1 3
2 3
3 2
1 2
2 3
0
Sample Output
10

Author

ZJU

Source

浙大计算机研究生复试上机考试-2008年

问题链接:HDU1878 欧拉回路。

问题简述

  输入若干测试用例,判定一个无向图是否有欧拉回路。

问题分析

无向图的欧拉回路需要满足两个条件,一是图是连通的,二是各个结点的入出度相同(有偶数个连接的边)。

程序说明

程序中用并查集判定图是否连通,对图构造一个并查集(树)后,如果连通则其根相同。用数组degree[]统计各个结点的连通度。

程序不够简洁,又写了一个简洁版。

AC的C++语言程序(简洁版)如下:

/* HDU1878 欧拉回路 */#include <iostream>
#include <string.h>using namespace std;const int N = 1000;
int f[N + 1], cnt;void UFInit(int n)
{for(int i = 1; i <=n; i++)f[i] = i;cnt = n;
}int Find(int a) {return a == f[a] ? a : f[a] = Find(f[a]);
}void Union(int a, int b)
{a = Find(a);b = Find(b);if (a != b) {f[a] = b;cnt--;}
}const int N2 = 1000;
int degreeout[N2+1];int main()
{int n, m, src, dest;while(cin >> n && n != 0) {// 初始化并查集UFInit(n);// 变量初始化memset(degreeout, 0, sizeof(degreeout));// 统计各个结点的联通度,并构建并查集(为判定图是否为连通图)cin >> m;while(m--) {cin >> src >> dest;degreeout[src]++;degreeout[dest]++;Union(src, dest);}// 判定int ans = 1;if(cnt != 1)ans = 0;elsefor(int i=1; i<=n; i++)if(degreeout[i] & 1 /*degree[i] % 2 == 1*/) {ans = 0;break;}// 输出结果cout << ans << endl;}return 0;
}

AC的C++语言程序如下:

/* HDU1878 欧拉回路 */#include <iostream>
#include <cstring>
#include <vector>using namespace std;// 并查集类
class UF {
private:vector<int> v;
public:UF(int n) {for(int i=0; i<=n; i++)v.push_back(i);}int Find(int x) {for(;;) {if(v[x] != x)x = v[x];elsereturn x;}}bool Union(int x, int y) {x = Find(x);y = Find(y);if(x == y)return false;else {v[x] = y;return true;}}
};const int MAXN = 1000;int degree[MAXN+1];int main()
{int n, m, src, dest;while(cin >> n && n != 0) {UF uf(n);cin >> m;// 变量初始化memset(degree, 0, sizeof(degree));// 统计各个结点的联通度,并构建并查集(为判定图是否为连通图)while(m--) {cin >> src >> dest;degree[src]++;degree[dest]++;if(uf.Find(src) != uf.Find(dest))uf.Union(src, dest);}// 判定int root = uf.Find(1), ans = 1;for(int i=1; i<=n; i++)if(uf.Find(i) != root || degree[i] & 1 /*degree[i] % 2 == 1*/) {ans = 0;break;}// 输出结果cout << ans << endl;}return 0;
}

HDU1878 欧拉回路【并查集】相关推荐

  1. I - Ant Trip (无向图欧拉回路+并查集),判断

    I - Ant Trip 参考博客:Ant Trip(欧拉回路+并查集) 参考:欧拉路径问题与欧拉回路问题 题意:给你无向图的 N 个点和 M 条边,保证这 M 条边都不同且不会存在同一点的自环边,现 ...

  2. hdu 1116 欧拉回路 并查集 一组字符串能否首尾相连成一个字符串

    主要是欧拉回路的基础知识,用并查集加工处理 注意欧拉回路和并查集的细节判断 不能粘贴复制,一定要理解之后再敲一遍代码,否则浪费更多的时间 #include <stdio.h> #inclu ...

  3. UVA - 10129 Play on Words(欧拉回路+并查集)

    2.解题思路:本题利用欧拉回路存在条件解决.可以将所有的单词看做边,26个字母看做端点,那么本题其实就是问是否存在一条路径,可以到达所有出现过的字符端点.由于本题还要求了两个单词拼在一起的条件是前一个 ...

  4. hdu 3018 图 欧拉回路 并查集

    http://acm.hdu.edu.cn/showproblem.php?pid=3018 题意  --许多蚂蚁 遍历一个图 每一条边只能走一次  问至少要把这些蚂蚁分为几群 说白了就是 至少几笔可 ...

  5. 牛客小白月赛2 D. 虚虚实实(欧拉回路,并查集)

    题目描述 震为雷,临危不乱,亨通畅达:巽为风,柔顺伸展,厚载万物. 震卦:洊雷,震,君子以恐惧修省.一口金钟在淤泥,人人拿着当玩石,忽然一日钟悬起,响亮一声天下知. 巽卦:随风,巽,君子以申命行事.一 ...

  6. poj 2513 Colored Sticks( 字典树哈希+ 欧拉回路 + 并查集)

    题目:http://poj.org/problem?id=2513 参考博客:http://blog.csdn.net/lyy289065406/article/details/6647445 htt ...

  7. POJ - 2513 Colored Sticks(字典树+并查集+欧拉回路)

    题目链接:点击查看 题目大意:给出n个木棍,问若两两相连,最终能否构成一根长直木棍,相连的规则是两个木棍的相接端点的颜色需要保持相同 题目分析:关于这个题目,我们可以将每个木棍视为一条边,每个木棍的两 ...

  8. 并查集求欧拉回路/通路

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1116 题意:给你一些英文单词,判断所有单词能不能连成一串,类似成语接龙.但是如果有多个重复的单词时,也必须 ...

  9. 图论-欧拉图-欧拉回路-Euler-Fluery-Hierholzer-逐步插入回路法-DFS详解-并查集

    欧拉图性质: 1.无向连通图G是欧拉图,当且仅当G不含奇数度结点(G的所有结点度数为偶数): 2.无向连通图G含有欧拉通路,当且仅当G有零个或两个奇数度的结点: 3.有向连通图D是欧拉图,当且仅当该图 ...

最新文章

  1. 机器学习研究的七个迷思
  2. nGrinder性能测试框架安装步骤
  3. # # # 正则
  4. [转]Android开发,实现可多选的图片ListView,便于批量操作
  5. mysql表单查询_表单查询实例
  6. python中赋值语句_python中赋值语句和增强赋值语句的区别
  7. 使用pdo,使用pdo无法插入数据怎么办
  8. 剑指Offer之第一个只出现一次的字符
  9. Ubuntu系统上为用户授予和删除sudo权限的方法
  10. 图论(二)--各种图介绍
  11. 计算机ers,读博、国企、互联网公司该如何选择?
  12. 金陵科技学院计算机科学与技术,计算机科学与技术专业考试大纲-金陵科技学院.DOC...
  13. 苹果手机壳_潮牌刺绣苹果8 Plus手机壳,让爱机焕然一新
  14. 计算机软件丛书,开天辟地学电脑丛书——办公软件篇
  15. 性能、应用、安装,选择LoRaWAN温湿度传感器的关键
  16. C语言判断第几天(最简版)
  17. python request 报错 #No JSON object could be decoded
  18. 计算机单片机原理考试题库,单片机原理及应用试题库-淮阴工学院
  19. 应该成为一名系统工程师么?
  20. 计算机网络——运输层

热门文章

  1. Spring.Net配置多数据源
  2. Golang实现基于Websocket协议的H5聊天室
  3. (转)Managed DirectX +C# 开发(入门篇)(七)
  4. Socket,CAsyncSocket,CSocket介绍
  5. 笔记本cpu排名_2020年双十一哪一款笔记本电脑值得买?高性价比笔记本电脑推荐(10月更新)...
  6. WinEdt10注册码
  7. (亲测)Hbase安装(傻瓜式安装)
  8. matlab里simulink,如何运用MATLAB中的Simulink?
  9. php是根据html中的值查询数据条件_FleaPHP框架数据库查询条件($conditions)写法总结...
  10. java 方法引用_JAVA 8 方法引用 - Method References