ACM-并查集之小希的迷宫——hdu1272
***************************************转载请注明出处:http://blog.csdn.net/lttree***************************************
小希的迷宫
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 24446 Accepted Submission(s): 7483
可是她设计迷宫的思路不一样。首先她觉得全部的通道都应该是双向连通的,就是说假设有一个通道连通了房间A和B。那么既能够通过它从房间A走到房间B,也能够通过它从房间B走到房间A,为了提高难度。小希希望随意两个房间有且仅有一条路径能够相通(除非走了回头路)。小希如今把她的设计图给你。让你帮忙推断她的设计图是否符合她的设计思路。比方以下的样例。前两个是符合条件的,可是最后一个却有两种方法从5到达8。

每两组数据之间有一个空行。
整个文件以两个-1结尾。
6 8 5 3 5 2 6 4
5 6 0 0 8 1 7 3 6 2 8 9 7 5
7 4 7 8 7 6 0 0 3 8 6 8 6 4
5 3 5 6 5 2 0 0 -1 -1
Yes
Yes
No
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1272
汉语题目,不多说。
并查集来解决,推断要合并的两个集合原来是否属于同一集合。
可是。还有几点要注意:
1. 不止要推断原来是否属于同一集合,还要推断是否有孤立的点。
2.假设没有数据,直接输入0 0。应该输出Yes
3.全部的点并非连续的,依据例1 能够知道。最小的点是2。最大的点是8。可是没有7这个点。
恩,注意上述几点,就能够完毕了。
/*******************************************
********************************************
* Author:Tree *
* From : blog.csdn.net/lttree *
* Title : 小希的迷宫 *
* Source: hdu 1272 *
* Hint : 并查集 *
********************************************
*******************************************/ #include <stdio.h>
#include <string.h> int father[100010];
bool isright,vis[100010]; void Init( void )
{
for( int i=1;i<100010;++i )
father[i]=i;
}
int Find( int x )
{
while( x!=father[x] )
{
x=father[x];
}
return x;
}
// 合并函数
void Combine(int a,int b)
{
int temp_a,temp_b;
temp_a=Find(a);
temp_b=Find(b);
if( temp_a!=temp_b )
father[temp_a]=temp_b;
else isright=false; // 假设本来属于同一集合,不属于小希迷宫
} // 推断 是否仅仅有一个集合
bool judge( int Min,int Max )
{
int i,js=0;
for( i=Min;i<=Max;++i )
if( vis[i] && father[i]==i )
++js;
if( js==1 ) return true;
return false;
} int main()
{
int a,b,Max,Min; // 初始化
Init();
isright=true;
Min=0x3f3f3f3f;
Max=-1;
memset(vis,0,sizeof(vis)); while( scanf("%d%d",&a,&b) && (a!=-1||b!=-1) )
{
if( !a || !b )
{
if( isright )
{
// Max!=-1 必须有,防止上来就输入0 0
if( judge(Min,Max)==0 && Max!=-1 )
printf("No\n");
else printf("Yes\n");
}
else printf("No\n"); // 完毕一组数据。初始化一下
Init();
isright=true;
Max=-1;
Min=0x3f3f3f3f;
memset(vis,0,sizeof(vis));
continue;
} //记录哪些点存在
vis[a]=vis[b]=1;
// 找最小值与最大值
Max=a>Max? a:Max;
Max=b>Max?b:Max;
Min=a<Min?a:Min;
Min=b<Min? b:Min;
// 合并集合
Combine(a,b); }
return 0;
}
ACM-并查集之小希的迷宫——hdu1272的更多相关文章
- (并查集)小希的迷宫 --HDU -- 1272
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1272 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- ACM学习历程—HDU 1272 小希的迷宫(并查集)
Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就 ...
- 小希的迷宫--hdu1272(并查集)
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- ACM : Travel-并查集-最小生成树 + 离线-解题报告
Travel Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%I64d & %I64u /*题意 给出n[节点 ...
- ACM:Pseudoforest-并查集-最大生成树-解题报
Pseudoforest Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 小希的迷宫---hdu1272
http://acm.hdu.edu.cn/showproblem.php?pid=1272 #include<stdio.h> #include<string.h> #inc ...
- 【转】并查集&MST题集
转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU]1213 How Many Tables 基础并查集★1272 小希的迷宫 基 ...
- 并查集(不相交集合)详解与java实现
目录 认识并查集 并查集解析 基本思想 如何查看a,b是否在一个集合? a,b合并,究竟是a的祖先合并在b的祖先上,还是b的祖先合并在a上? 其他路径压缩? 代码实现 结语 @(文章目录) 认识并查集 ...
- hdu 1257 小希的迷宫 并查集
小希的迷宫 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1272 D ...
随机推荐
- C语言和C++的应用领域都在哪些?学C语言好,还是学习C++好?
从事嵌入式开发十几年,基本上围绕着这两种编程语言展开,都可以直接操作底层的编程语言,用的越熟练越是感觉工具属性越强.虽然两种编程语言分属于不同的编程思想,用的时间长了觉得差异也不是很大,现在就个人的从 ...
- LocalDateTime查找最近的五分钟点
/** * 最近的五分钟 * @param dateTime * @return */ public static LocalDateTime getNear5(LocalDateTime dateT ...
- 在PL/SQL中使用游标、动态sql和绑定变量的小例子
需求:查询并输出30号部门的雇员信息 方式一:使用 loop...fetch SET serveroutput ON; DECLARE CURSOR c_emp IS ; v_emp emp%rowt ...
- SQLServer2008 在where条件中使用CASE WHEN
create table #temp( id int identity(1,1), name varchar(20), startYear int, startMonth in ...
- SqlSever2005 一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】
对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当数 ...
- 【Oracle】DBMS_STATS.GATHER_TABLE_STATS
月初一直在忙保监会报送的事情,苦逼的保险行业的ETL大家都懂的.今天闲来无事查看了一下前阵子的报送存储过程,发现系统隔一段时间就会调用一次DBMS_STATS.GATHER_TABLE_STATS,所 ...
- VHDL之concurrent之generate
GENERATE It is another concurrent statement (along with operators and WHEN). It is equivalent to the ...
- 微信小程序中的iPhone X适配问题
微信小程序中的iPhone X适配问题 小程序中下方的导航会被iPhone X下面的那条黑线盖住[微笑脸],所以要专门为了iPhone X做样式上的适配[微笑脸] wx.getSystemInfo({ ...
- Java通过接口实现匿名类的实例
package com.chase.test; /** * 通过接口实现匿名类的实例 * * @author Chase * * @date 2013-10-18 下午04:28:17 * * @ve ...
- Windows Server 2008 R2 搭建DNS服务器(转)
Windows Server 2008 R2 搭建DNS服务器将本机IP设为首选DNS服务器的地址在dos 下分别输入 nslookup www.mydns.com 和 nslookup 192.16 ...