1. 程式人生 > >hdu1878-並查集,歐拉回路

hdu1878-並查集,歐拉回路

flag space 回路 ostream mes eof break != fine

純裸題。。寫著方便理解。。。

題意:判斷一個無向圖是否存在歐拉回路。。。

解題思路:並查集判斷一下是否聯通,然後再判斷一下點的度數是否為偶數就行了;

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#define maxn 2010
using namespace std;
int f[maxn];
int findf(int x)
{
    if(f[x]==x)
        return x;
    else return findf(f[x]);
}
void join(int x,int y) { int t1,t2; t1=findf(x); t2=findf(y); if(t1!=t2) f[t2]=t1; } int main() { int n; int degree[maxn]; int m; int cnt; int x,y; int flag; while(scanf("%d%d",&n,&m)!=EOF) { if(n==0) break; cnt
=0,flag=0; memset(degree,0,sizeof(degree)); for(int i=1;i<=n;i++) f[i]=i; for(int i=1;i<=m;i++) { scanf("%d%d",&x,&y); join(x,y); degree[y]++; degree[x]++; } for(int i=1;i<=n;i++) {
if(f[i]==i) cnt++; } for(int i=1;i<=n;i++) { if(degree[i]%2==1) flag=1; } if(cnt==1&&flag==0) printf("1\n"); else printf("0\n"); } return 0; }

hdu1878-並查集,歐拉回路