题意:其实就是让你判断一个图是否为树,要求不能有孤立的点(没有这中情况),且只能有1个连通图,且边数+1=点数,且每个点都有边(不可能只有1个点出现)。
思路:有可能出现连续的4个0,也就是有测试例子是完全没有点的,也没有边,要打印Yes!记录下所有点(去重),记录下每个点的度数,如果有n个点,n-1条边,且每点都是有边连着的,再判断其只有一个连通图就行了。因为只有n-1条边,所以当只有一个连通图时,必不会有环的产生。
判断是否只有一个连通图的方法:
(1)BFS
(2)DFS
(3)并查集
(4)prim、kruscal生成一个树,所有点和所有边都要用上。
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N=100005; 4 const int mod=0x7f7f7f7f; 5 int num[N]; 6 /* 7 仅仅靠边数+点数来断定是否为树,应该是错的。测试数据: 8 1 2 3 4 9 3 5 4 5 10 0 0 11 */ 12 int main() 13 { 14 freopen("e://input.txt", "r", stdin); 15 int n, a, b; 16 while(1) 17 { 18 memset(num,0,sizeof(num)); 19 int cnt=0, siz=0; 20 while(scanf("%d%d",&a,&b),a+b>0) 21 { 22 if(!num[a]) 23 { 24 siz++; //点数 25 num[a]++; 26 } 27 if(!num[b]) 28 { 29 siz++; 30 num[b]++; 31 } 32 cnt++; //边数 33 } 34 if(a==-1 && b==-1) break; 35 if(!cnt||cnt+1==siz) printf("Yes\n"); 36 else printf("No\n"); 37 38 } 39 return 0; 40 }
AC的错误代码
时间: 2024-10-31 10:30:15