标签:
题意:每次输入的两个点代表一条边,问输入完所有的边后,该图中是否每两个点之间只有一条路径(当然输入的边都是双向的)。
那么我们只需要判断输入的边的个数+1是否等于图中点的个数。(这道题虽然在并查集专题里,但这种方法无疑是最好的,不需要并查集即可,可以理解为最小生成树)
#include<stdio.h> #include<string.h> const int N=100010; int main () { int a, b, ans, k, c[N], i; while (scanf("%d%d", &a, &b), a != -1 || b != -1) { if (a == 0 && b == 0) ///此时该树为一棵空树 { printf("Yes\n"); continue; } memset(c, 0, sizeof(c)); ans = k = 0; c[a] = c[b] = 1; ans++; while (scanf("%d%d", &a, &b), a+b) { ans++; c[a] = c[b] = 1; } for (i = 1; i < N; i++) if (c[i]) k++; if (k == ans+1) printf("Yes\n"); else printf("No\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/syhandll/p/4785208.html