1. 程式人生 > >【杭電】[1878]歐拉回路

【杭電】[1878]歐拉回路

這裡寫圖片描述
這裡寫圖片描述

判斷是否存在歐拉回路

1.每個點必須有偶數點連線
2.只能有一個根

所以用並查集可以輕鬆完成

#include<stdio.h>
int par[1020];
int r[1020];
int find(int m) {
    if(par[m]==m)
        return m;
    else
        return par[m]=find(par[m]);
}
void unite(int x,int y) {
    x=find(x);
    y=find(y);


    par[y]=x;
}
int main() {
    int n;
    while
(scanf("%d",&n),n) { int m; scanf("%d",&m); for(int i=1; i<=n; i++) { r[i]=0; par[i]=i; } while(m--) { int x,y; scanf("%d %d",&x,&y); unite(x,y); r[x]++; r[y]++; } int
cnt=0; for(int i=1; i<=n; i++) if(i==find(i)) cnt++; if(cnt!=1) { printf("0\n"); continue; } int i; for(i=1; i<=n; i++) { if(r[i]&1) break; } if(i<=n) printf
("0\n"); else printf("1\n"); } return 0; }