[ ACM ] Hdu 1878 欧拉回路

欧拉通路:图中所有的节点的度都是偶数。

所以只需要记一下每个点出现的次数即可。

有一种像下面的特例(n==6):
  1       4
 / \     / \
2---3   5---6
虽然每个节点的度都是2,但分成了两部分。

所以,还要用并查集判断一下。

 1 #include <cstdio>

 2 #include <cstring>

 3 

 4 const int MAXN=1000+5;

 5 const int INF=100000000;

 6 

 7 int node[MAXN];

 8 int parent[MAXN];

 9 

10 int main(){

11     int n,m;

12     while(scanf("%d",&n) && n!=0){

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

14         for(int i=0;i<=n;i++){

15             node[i]=0;

16             parent[i]=i;

17         }

18         int a,b;

19         while(m--){

20             scanf("%d %d",&a,&b);

21             node[a]++;

22             node[b]++;

23             parent[b]=parent[a];

24         }

25         int ans=0,ok=true;

26         for(int i=1;i<=n;i++){

27             if(node[i]%2!=0)ans++;

28         }

29         if(ans==0){

30             int t=parent[1];

31             for(int i=1;i<=n;i++){

32                 if(parent[i]!=t)

33                     ok=false;

34             }

35         }

36         else 

37             ok=false;

38 

39         if(ok)printf("1\n");

40         else printf("0\n");

41     }

42 }

 

你可能感兴趣的:(ACM)