HDU 1878 欧拉回路 图论

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

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

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 int map[1005];
 6 int prim[100005];
 7 int find(int n) {
 8     return prim[n]==n? n:(prim[n] = find(prim[n]));
 9 }
10 
11 int main() {
12     int n,m,x,y;
13     while(scanf("%d",&n)&&n) {
14         scanf("%d",&m);
15         for(int i = 1;i<=n;++i)
16         prim[i] = i;
17         memset(map,0,sizeof(map));
18         for(int i = 1;i<=m;++i) {
19             scanf("%d%d",&x,&y);
20             map[x]++;
21             map[y]++;
22             if(x>y)
23             swap(x,y);
24             prim[find(x)] = find(y);
25         }
26         int flag = 1;
27         int d = find(1);
28         for(int i = 1;i<= n;++i) {
29             if(find(i) != d) {
30                 flag = 0;
31                 break;
32             }
33             if(map[i]%2) {
34                 flag = 0;
35                 break;
36             }
37         }
38         printf(flag? "1
":"0
");
39     }
40     return 0;
41 }
View Code
原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3191387.html