以前还以为自己当时做的那个"一笔画问题"有问题, 做了这个题之后才发现当时水到没边了。 纯欧拉回路(所有节点入度均为偶数)。
#include <cstdio> #include <cstring> #include <iostream> using namespace std; const int N = 1001; int n, M, father[N], degree[N]; void init() { for(int i = 1; i <= n; i++) father[i] = i; } int Find(int a) { if(a == father[a]) return a; else return father[a] = Find(father[a]); } void Mercy(int a,int b) { int Q = Find(a); int P = Find(b); if(Q != P) father[Q] = P; } int main() { while(~scanf("%d", &n), n) { init(); scanf("%d", &M); memset(degree, 0, sizeof(degree)); for(int i = 0; i < M; i++) { int a, b; scanf("%d%d", &a, &b); Mercy(a, b); degree[a]++; degree[b]++; } int TotAl = 0; bool flag = true; for(int i = 1; i <= n; i++) { if(i == father[i]) TotAl++; if(degree[i] & 1) flag = false; } if(flag == false || TotAl != 1) printf("0 "); else printf("1 "); } return 0; }