0
点赞
收藏
分享

微信扫一扫

hdu1878 欧拉回路--入门题


原题链接:​​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;
}





举报

相关推荐

0 条评论