HDU 1878 欧拉回路(图论)

题目链接

根据欧拉提出的定理,存在欧拉路的充要条件是连通,不存在奇数度数节点或者2个奇数节点。存在欧拉回路是连通,不存在奇数度数节点。

并查集写的有点暴力,水过。还好1Y。

 1 #include <stdio.h>

 2 #include <string.h>

 3 int o[1001],p[1001];

 4 int find(int x)

 5 {

 6     while (x != p[x])

 7      x = p[x];

 8     return x;

 9 }

10 void merge(int x,int y)

11 {

12     x = find(x);

13     y = find(y);

14     if(x != y)

15     p[x] = y;

16 }

17 int main()

18 {

19     int n,m,i,num,sv,ev;

20     while(scanf("%d",&n)!=EOF)

21     {

22         if(!n) break;

23         memset(o,0,sizeof(o));

24         for(i = 1;i <= n;i ++)

25         {

26             p[i] = i;

27         }

28         num = 0;

29         scanf("%d",&m);

30         for(i = 1;i <= m;i ++)

31         {

32             scanf("%d%d",&sv,&ev);

33             merge(sv,ev);

34             o[sv]++;

35             o[ev]++;

36         }

37         for(i = 1;i <= n;i ++)

38         {

39             if(o[i]%2 == 1)

40             num ++;

41         }

42         for(i = 2;i <= n;i ++)

43         {

44             if(find(i) != find(1))

45             break;

46         }

47         if(i == n+1)

48         {

49             if(num == 0)

50             printf("1\n");

51             else

52             printf("0\n");

53         }

54         else

55         printf("0\n");

56     }

57     return 0;

58 }

你可能感兴趣的:(HDU)