[ 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 }

 

posted @ 2015-04-12 18:11  纸牌  阅读(122)  评论(0编辑  收藏  举报