HDU 1878 欧拉回路 图论

时间:2021-11-23 16:08:35

解题报告:题目大意,给出一个无向图,判断图中是否存在欧拉回路。

判断一个无向图中是否有欧拉回路有一个充要条件,就是这个图中不存在奇度定点,然后还要判断的就是连通分支数是否为1,即这个图是不是连通的,这个用并查集就可以了。

 #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int map[];
int prim[];
int find(int n) {
return prim[n]==n? n:(prim[n] = find(prim[n]));
} int main() {
int n,m,x,y;
while(scanf("%d",&n)&&n) {
scanf("%d",&m);
for(int i = ;i<=n;++i)
prim[i] = i;
memset(map,,sizeof(map));
for(int i = ;i<=m;++i) {
scanf("%d%d",&x,&y);
map[x]++;
map[y]++;
if(x>y)
swap(x,y);
prim[find(x)] = find(y);
}
int flag = ;
int d = find();
for(int i = ;i<= n;++i) {
if(find(i) != d) {
flag = ;
break;
}
if(map[i]%) {
flag = ;
break;
}
}
printf(flag? "1\n":"0\n");
}
return ;
}