题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=42
题目分析:
要能一笔画化成需要同时满足两个以下条件:
1)该图是连通的。
2)图中奇点的个数是2或者0。
参考代码:
#include<stdio.h> #include<string.h> int set[1001]; int find(int k) { int r = set[k]; while(r != set[r]) r = set[r]; return r; } void merge(int r1, int r2) { if(r1 < r2) set[r2] = r1; else set[r1] = r2; } int main() { bool used[1001]; int count[1001]; int t,i; int a,b,c; int p,q; int r1,r2; int ans; scanf("%d", &t); while(t--) { memset(count, 0, sizeof(count)); memset(used, 0, sizeof(used)); scanf("%d %d", &p, &q); for(i = 0; i <= q; ++i) set[i] = i; c = 0; for(i = 0; i < q; ++i) { scanf("%d %d", &a, &b); if(!used[a]) { ++c; used[a] = true; } if(!used[b]) { ++c; used[b] = true; } r1 = find(a); r2 = find(b); if(r1 != r2) { merge(r1,r2); --c; } ++count[a]; ++count[b]; } ans = 0; for(i = 1; i <= p; ++i) { if(!used[i]) ++c; if(count[i] & 1) ++ans; } if(c <= 1 && (ans == 2 || ans == 0)) printf("Yes\n"); else printf("No\n"); } }