HDU-1878 欧拉回路判定

来源:互联网 发布:nodejs调用python脚本 编辑:程序博客网 时间:2024/06/10 03:24

入门题目。

/* * hdu-1878 欧拉回路 * mike-w * 2011-10-3 */#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 1111int set[MAXN];int rank[MAXN];int degree[MAXN];int init(int size){int i;for(i=1;i<=size;i++)set[i]=i,rank[i]=1;return 0;}int find(int e){int node=e,root;while(set[node]!=node)node=set[node];root=node;while(set[e]!=root)set[e]=root;return root;}int merge(int e1,int e2){int r1=find(e1),r2=find(e2);if(r1==r2)return 0;if(rank[r1]>rank[r2])set[r2]=r1;else if(rank[r1]<rank[r2])set[r1]=r2;elseset[r1]=r2,rank[r2]++;return 1;}int main(void){int N,M;int nset,even,i,t1,t2;#ifndef ONLINE_JUDGEfreopen("1878.in","r",stdin);#endifwhile(scanf("%d%d",&N,&M),N){init(N);memset(degree,0,sizeof(degree));nset=N;for(i=0;i<M;i++){scanf("%d%d",&t1,&t2);degree[t1]++;degree[t2]++;if(merge(t1,t2))nset--;}even=0;for(i=1;i<=N;i++)if(degree[i]&0x1)even++;if(even || nset>1 )printf("%d\n",0);elseprintf("%d\n",1);}return 0;}