hdu 1878 欧拉回路

判断是否存在欧拉回路

存在欧拉回路的条件:

无向图

1) 连通

2) 所有节点的度为偶数

不知道用并查集做是不是本来就比较慢,反正慢了好多

#include<iostream>
using namespace std;
int r[1000],f[1000];
int find(int x)
{
	if(x==f[x])
		return x;
	f[x]=find(f[x]);
};
void Union(int x,int y)
{
	int a=find(x);
	int b=find(y);
	if(a!=b)
		f[b]=a;
	return;

}
void init(int n)
{
	for(int i=0;i<=n;i++)
		f[i]=i;
	memset(r,0,sizeof(r));
}
int main()
{
	int n,m,a,b;
	while(cin>>n&&n)
	{
		cin>>m;
		init(n);
		for(int i=0;i<m;i++)
		{
			cin>>a>>b;
			r[a]++;
			r[b]++;
			Union(a,b);
		}
		int count=0;
		for(int i=0;i<=n;i++)
		{
			//cout<<r[i]<<endl;
			if(r[i]&&i==find(i))
			{
				count++;
			}
		}
		if(count!=1)
		{
			cout<<0<<endl;
			continue;
		}
		int flag=0;
		for(int i=0;i<=n;i++)
			if(r[i]&&r[i]%2!=0)
			{
				flag=1;break;
			}
		if(!flag)
			cout<<1<<endl;
		else cout<<0<<endl;
	}
	return 0;
}


posted @ 2011-08-05 14:04  枕边梦  阅读(287)  评论(0编辑  收藏  举报