hdu1878-並查集,歐拉回路
阿新 • • 發佈:2018-02-17
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-並查集,歐拉回路