题意:

  其实就是让你判断一个图是否为树,要求不能有孤立的点(没有这中情况),且只能有1个连通图,且边数+1=点数,且每个点都有边(不可能只有1个点出现)。

思路:

  有可能出现连续的4个0,也就是有测试例子是完全没有点的,也没有边,要打印Yes!记录下所有点(去重),记录下每个点的度数,如果有n个点,n-1条边,且每点都是有边连着的,再判断其只有一个连通图就行了。因为只有n-1条边,所以当只有一个连通图时,必不会有环的产生。

判断是否只有一个连通图的方法:

(1)BFS(可用)

(2)DFS(有10万点,可能爆栈)

(3)并查集(可用)

(4)prim、kruscal生成一个树,所有点和所有边都要用上。

(5)Dijkstra、Bellman-Ford  求单点到其他点的路径长,如果有两点的路径为无穷则证明有点不可达。

 #include <bits/stdc++.h>
using namespace std;
const int N=;
const int mod=0x7f7f7f7f;
int num[N];
/*
仅仅靠边数+点数来断定是否为树,应该是错的。测试数据:
1 2 3 4
3 5 4 5
0 0
*/
int main()
{
freopen("e://input.txt", "r", stdin);
int n, a, b;
while()
{
memset(num,,sizeof(num));
int cnt=, siz=;
while(scanf("%d%d",&a,&b),a+b>)
{
if(!num[a])
{
siz++; //点数
num[a]++;
}
if(!num[b])
{
siz++;
num[b]++;
}
cnt++; //边数
}
if(a==- && b==-) break;
if(!cnt||cnt+==siz) printf("Yes\n");
else printf("No\n"); }
return ;
}

AC的错误代码

 #include <bits/stdc++.h>
using namespace std;
const int N=, mod=0x7f7f7f7f;
unordered_map<int,int> mapp;//将点编号映射到从1开始的连续的编号
int pre[N];
int find(int a) //查
{
int tmp=a;
while(pre[tmp]!=tmp) tmp=pre[tmp]; //找到a的祖先
pre[a]=tmp; //改其祖先
int p;
while(a!=tmp) //从a到tmp所经过的点,改其全部祖先
{
p=pre[a];
pre[a]=tmp;
a=p;
}
return tmp;
} void joint(int a,int b) //并
{
a=find(a);
b=find(b);
if(a!=b) pre[a]=b;
} void init() //初始化pre,不知道点个数,所以只能这样了
{
for(int i=; i<=N; i++) pre[i]=i;
} int istree(int n) //每个房间都是连着的
{
for(int i=; i<=n; i++) find(i); //防止漏网之鱼
for(int i=; i<n; i++) if(pre[i]!=pre[i+]) return ; //不是同个领导的
return ;
} int main()
{
freopen("e://input.txt", "r", stdin);
int n, a, b;
while()
{
memset(pre,,sizeof(pre));
mapp.clear();
init(); //初始化pre[]祖先列表
int cnt=, j=; while(scanf("%d%d",&a,&b),a>&&b>)
{
//cout<<"123"<<endl;
if(!mapp[a]) mapp[a]=++j; //重新编号
if(!mapp[b]) mapp[b]=++j; joint(mapp[a], mapp[b]);
cnt++; //边数
}
if(a==- || b==-) break; if(!cnt) printf("Yes\n"); //坑
else if(cnt+!=j) printf("No\n");//边多了肯定不行
else
{
if(istree(j)) printf("Yes\n");
else printf("No\n");
}
}
return ;
}

AC代码(并查集实现)

HDU 1272 小希的迷宫 (水题)的更多相关文章

  1. HDU 1272小希的迷宫(裸并查集,要判断是否构成环,是否是连通图)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1272 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    ...

  2. hdu 1272 小希的迷宫(并查集+最小生成树+队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)     ...

  3. hdu 1272 小希的迷宫 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 第二条并查集,和畅通工程的解法类似.判断小希的迷宫不符合条件,即有回路.我的做法是,在合并两个集 ...

  4. HDU 1272 小希的迷宫 (并查集)

    小希的迷宫 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/L Description 我们的小伙伴Bingo身为大二学长,他乐于 ...

  5. hdu 1272 小希的迷宫【并查集】

    <题目链接> 小希的迷宫 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的 ...

  6. hdu 1272 小希的迷宫(java实现)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  7. HDU——1272小希的迷宫(并查集+拓扑排序)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  8. HDU - 1272 小希的迷宫 并查集判断无向环及连通问题 树的性质

    小希的迷宫 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一 ...

  9. HDU 1272 小希的迷宫 并查集

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  10. hdu 1272 小希的迷宫

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

随机推荐

  1. .htaccess文件讲解

    .htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户 ...

  2. 企业运营对 DevOps 的「傲慢与偏见」

    摘要:出于各种原因,并非所有人都信任 DevOps .有些人觉得 DevOps 只不过给开发者改善产品提供了一个途径而已,还有的人觉得 DevOps 是一堆悦耳的空头支票,甚至有人认为 DevOps ...

  3. 核稀疏表示分类(KSRC)

    参考:<Kernel SparseRepresention-Based Classifier> 原文地址:http://www.cnblogs.com/Rosanna/p/3372153. ...

  4. 360抢票 网站维护中 && 你的登录被踢了!

    本来在超市犹豫到底该买哪种暖手袋,犹豫了差不多半个多小时,还没决定好,一看时间还有8分钟到10点,遂狂奔回寝室抢票. 结果,360抢票被12306秒了—— 猜测原因是12306的验证码改了(变成动态的 ...

  5. keystonejs

    开始之前先确保你已经安装了Node.js 0.10+ 和MongoDB v2.4+. 要使用KeystoneJS,你需要掌握合理的Javascript知识,并熟悉数据库概念之类的基础知识,会用 nod ...

  6. lintcode 中等题:Max Points on a Line 最多有多少个点在一条直线上

    题目 最多有多少个点在一条直线上 给出二维平面上的n个点,求最多有多少点在同一条直线上. 样例 给出4个点:(1, 2), (3, 6), (0, 0), (1, 3). 一条直线上的点最多有3个. ...

  7. Pythonxy下载链接

    http://pythonxy.connectmv.com/ 版权声明:本文为博主原创文章,未经博主允许不得转载.

  8. 安装xampp后,出现“Apache 2 Test Page powered by CentOS“

    因为是在本地测试,所以没有去考虑为什么会这样,考虑太多的原因.只要能运行就行. 所以网络搜索了一番. 最后,解决办法是: 1, 找到apachectl. 那么就在命令行敲find / -name ap ...

  9. Hibernate逍遥游记-第13章 映射实体关联关系-005双向多对多(使用组件类集合\<composite-element>\)

    1. <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hi ...

  10. 2014-9-17二班----8 web project

    http://localhost:8080/rwkj1/indexServlet   地址请求后,,,,浏览器 地址栏没有变化 package cn.rwkj.servlet; import java ...