HDU 1878-欧拉回路
来源:互联网 发布:linux下配置java home 编辑:程序博客网 时间:2024/05/18 01:16
欧拉回路
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 15455 Accepted Submission(s): 5912
题目链接:点击打开链接
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
1
0
3 3
1 2
1 3
2 3
3 2
1 2
2 3
0
Sample Output
1
0
分析:欧拉回路加并查集。
#include <iostream>#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;int s[1010],h[1010];int Find(int x){ if(x==s[x]) return x; else return s[x]=Find(s[x]);}//找到根节点void meet(int x,int y){ int f1=Find(x); int f2=Find(y); if(f1!=f2) s[f1]=f2;}//压缩路径int main(){ int N,M,a,b; while(scanf("%d",&N)&&N) { for(int i=1;i<=N;i++) s[i]=i; memset(h,0,sizeof(h)); scanf("%d",&M); while(M--) { scanf("%d %d",&a,&b); h[a]++; h[b]++;//记录该点的度,便于后面判断奇偶度 meet(a,b); } int bj=0;//记录有几个根节点 for(int i=1;i<=N;i++) { if(Find(i)==i) bj++; } if(bj>1)//如果根节点大于1,说明不止一个连通块,那么就不能构成欧拉回路 printf("0\n"); else { bj=0; for(int i=1;i<=N;i++) if(h[i]%2)//判断点的度数是奇度还是偶度,如果有奇度的点存在,说明也不行 { bj=1; break; } if(bj) printf("0\n"); else printf("1\n"); } } return 0;}
阅读全文
0 0
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- 【欧拉回路】hdu 1878
- hdu 1878 欧拉回路
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU-1878-欧拉回路
- Hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU-1878 欧拉回路
- HDU 1878 欧拉回路
- SQL中的游标
- 公开DNS服务器地址
- DoTween
- 【雪野实训记录】Oracle数据库 T4作业——事务和数据库对象
- css省略溢出文本
- HDU 1878-欧拉回路
- [总结]操作系统真是博大精深(五)
- Java中的abstract方法和abstract类的问题
- Codeforces Round #411 D. Minimum number of steps【逆向思维+模拟】
- 文章学习《深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目》未完
- iOS解读AFN查看请求头,判断响应成功、失败
- Prime算法
- 运行项目总是报错
- RecyclerView.Adapter封装,包括点击监听,长按监听,继承时不需要重新设置