解题报告:题目大意,给出一个无向图,判断图中是否存在欧拉回路。
判断一个无向图中是否有欧拉回路有一个充要条件,就是这个图中不存在奇度定点,然后还要判断的就是连通分支数是否为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 }