题意: 中文题面,直说求欧拉回路,再也不能说英文题看不懂了
题解:
- 连通性: 并查集。 连通的点用并查集合并,最后判断如果连通区块大于1,则图是不连通的。
- 欧拉回路: 在连通的基础上,判断是否所有点都是偶点即可。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
int n, m, a, b;
int s[N], deg[N], G[N][N];
int find(int x){ return s[x]==x? x: s[x]=find(s[x]);}
void un(int a, int b){ int sa=find(a), sb=find(b); s[sb] = sa;}
bool check(){
int cnt = 0;
for(int i = 1; i <= n; i++) if(s[i] == i) cnt++;
if(cnt > 1) return false; return true;
}
int main(){
while(~scanf("%d", &n) && n){
scanf("%d", &m);
memset(G, 0, sizeof G);
memset(deg, 0, sizeof deg);
for(int i = 1; i <= n; i++) s[i] = i;
while(m--){
scanf("%d%d", &a, &b);
un(a, b); deg[a]++, deg[b]++;
}
bool flag = check();
if(!flag) printf("0\n");
else{
bool sign = true;
for(int i = 1; i <= n; i++) if(deg[i] % 2){ printf("0\n");sign = false; break;}
if(sign) printf("1\n");
}
}
return 0;
}