码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1272 小希的迷宫 (判断是否为树)

时间:2015-06-30 01:17:24      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

 

 

题意:其实就是让你判断一个图是否为树,要求不能有孤立的点(没有这中情况),且只能有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的错误代码

 

HDU 1272 小希的迷宫 (判断是否为树)

标签:

原文地址:http://www.cnblogs.com/xcw0754/p/4609181.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!