HDU 1878 欧拉回路
来源:互联网 发布:生死狙击矩阵图片 编辑:程序博客网 时间:2024/06/02 04:16
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
题解:题面即题解。
判断无向图是否存在欧拉回路。
读错题了md。
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();} return x*f;}const int N = 1000 + 10;int n,m;int in[N],fa[N],vis[N],siz[N];int find(int x){ if(x==fa[x]) return fa[x]; return fa[x]=find(fa[x]);}#define ms(x,y) memset(x,y,sizeof(x))void update(){ ms(in,0);ms(vis,0); for(int i=1;i<=n;i++) fa[i]=i,siz[i]=1;}int main(){ while(1){ n=read();if(n==0) break; m=read();update(); for(int i=1;i<=m;++i){ int u=read(),v=read(); int x=find(fa[u]),y=find(fa[v]); ++in[u],++in[v]; if(x==y) continue; fa[x]=y,siz[y]+=siz[x]; } int sum=0,f=find(1); bool flag=false; for(int i=1;i<=n;i++){ int x=find(i); if(x!=f) {flag=true;break;} if(in[i]&1) ++sum; } if(flag||sum!=0) 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 欧拉回路
- 读程序基础
- 数据仓库
- 堆优化DP 征途堆积出友情的永恒
- mongodb学习笔记
- Mac上一键反编译Apk与查看jar文件
- HDU 1878 欧拉回路
- 1.10 c++_函数
- Per(前缀和)
- [BZOJ]4750: 密码安全 单调栈
- 实验二:单链表的实现
- 大小写的转换
- tensorflow学习(二):命令行参数
- 各种Linux系统 (一句话介绍
- Servlet 转发、包含、重定向对比