原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1878
分析:存在欧拉回路的充要:连通+度都是偶数。
并查集判连通。
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<vector>
#include<cstring>
#include<queue>
#include<stack>
#include<algorithm>
#include<cmath>
#include<string>
#include<stdio.h>
#define INF 1000000000
#define eps 0.0001
using namespace std;
int num[1005];
int n, m;
int fa[1005];
void connect(int a, int b)
{
if (fa[a] == fa[b])
return;
int aa = fa[a];
int bb = fa[b];
for (int i = 1; i <= n; i++)
if (fa[i] == aa)
fa[i] = bb;
}
int main()
{
while (scanf("%d", &n) && n)
{
scanf("%d", &m);
for (int i = 1; i <= n; i++)
{
fa[i] = i;
num[i] = 0;
}
int a, b;
while (m--)
{
scanf("%d%d", &a, &b);
num[a]++;
num[b]++;
connect(a, b);
}
bool flag = false;
for (int i = 1; i <= n;i++)
if (num[i] == 0 || num[i] % 2 == 1)
{
flag = true;
break;
}
if (flag)
printf("0\n");
else
{
int cnt = 0;
for (int i = 1; i <= n; i++)
if (fa[i] == i)
cnt++;
if (cnt == 1)
printf("1\n");
else
printf("0\n");
}
}
return 0;
}