小希的迷宫

题目链接:

http://acm.hust.edu.cn/vjudge/contest/123393#problem/L

Description

我们的小伙伴Bingo身为大二学长,他乐于助人,同学们问他问题他都耐心的一一回答,但是却有一道题难住了他。我们快来看看到底是什么题吧!这是一个迷宫,首先所有的通道都是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,而且任意两个房间有且仅有一条路径可以相通(除非走了回头路)。现在把设计图给了Bingo,让Bingo帮忙判断设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,但是最后一个却有两种方法从5到达8。

Input

输入包含多组数据,每组数据是一个以0 0结尾的整数对列表,表示了一条通道连接的两个房间的编号。房间的编号至少为1,且不超过100000。每两组数据之间有一个空行。

整个文件以两个-1结尾。

Output

对于输入的每一组数据,输出仅包括一行。如果该迷宫符合思路,那么Bingo输出"Yes",否则输出"No"。

Sample Input

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

Sample Output

Yes

Yes

No

##题意:

判断给出的图是否是联通无环图.


##题解:

首先很容易想到用并查集来判断是否有出现环:若新边的两个端点在同一集合则出现环.
一开始没有仔细看题,直接写了并查集就交上去了,但是这个题应该还需要判断是否是联通的,所以要再遍历看所有点是否都在同一集合.

这个错误警醒了我:在做专题训练的时候,不能先入为主直接往正在训练的算法上想,而是应该多考虑如何正确分析题目才能想到用这种算法,除了这种算法以外还需要运用什么.


##代码:
``` cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define eps 1e-8
#define maxn 101000
#define mod 100000007
#define inf 0x3f3f3f3f
#define IN freopen("in.txt","r",stdin);
using namespace std;

int fa[maxn];

int _rank[maxn];

bool vis[maxn];

void init_set() {

for(int i=0; i<maxn; i++) {

fa[i] = i;

_rank[i] = 0;

}

}

int find_set(int x) {

return fa[x] = (x==fa[x]? x:find_set(fa[x]));

}

void unit_set(int x, int y) {

vis[x] = vis[y] = 1;

x = find_set(x);

y = find_set(y);

if(_rank[x] < _rank[y]) swap(x, y);

fa[y] = x;

if(_rank[x] == _rank[y]) _rank[x]++;

}

int main(int argc, char const *argv[])

{

//IN;

int x, y, ans = 1;
init_set();
memset(vis, 0, sizeof(vis));
while(scanf("%d %d", &x, &y) != EOF && (x!=-1||y!=-1))
{
if(!x && !y) {
int last = -1;
for(int i=0; i<maxn; i++) {
if(!vis[i]) continue;
if(last == -1) last = find_set(i);
if(last != find_set(i)) {
ans = 0; break;
}
}
if(ans) puts("Yes");
else puts("No");
ans = 1;
init_set();
memset(vis, 0, sizeof(vis));
continue;
} if(find_set(x) == find_set(y)) ans = 0;
else unit_set(x, y);
} return 0;

}

HDU 1272 小希的迷宫 (并查集)的更多相关文章

  1. <hdu - 1272> 小希的迷宫 并查集问题 (注意特殊情况)

     本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 Problem Description: 上次Gardon的迷宫城堡小希玩了很久(见Probl ...

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

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

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

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

  4. (step5.1.6)hdu 1272(小希的迷宫——并查集)

    题目大意:输入一系列的点,判断这些点组成的图符不符合小希的思路(无环.连通) 解题思路: 1)如果两个节点的根节点相同,那么在这两个节点之间添加1条边以后,这个图肯定有环路. 2)孤立节点:被使用过& ...

  5. hdu 1257 小希的迷宫 并查集

    小希的迷宫 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1272 D ...

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

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

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

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

  8. HDU 1272 小希的迷宫(并查集) 分类: 并查集 2015-07-07 23:38 2人阅读 评论(0) 收藏

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

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

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1272 思路 只需要判断 这张图 无环 并且只有一个连通块 就可以了 要注意 如果 只输入 0 0 那给 ...

随机推荐

  1. 23.allegro中自动布线[原创]

    1. --- 方法①:选择网络自动布线 -- --- 已经步好: --- 方法②: ---- ---- 布线: --- 方法③: -- ----

  2. php整理(二): 数组

    数组: 首先说一下对PHP中的理解,建立一个好的理解模型还是很关键的: 1.PHP中的数组实际上可以理解为键值对,key=>value;而对于key的取值,可以是string/integer;v ...

  3. 使用git对unity3d项目进行版本控制

    http://stackoverflow.com/questions/18225126/how-to-use-git-for-unity-source-control The following is ...

  4. VS2012安装英文的语言包后,调试的时候提示Unknown error:0x80040d10

    https://social.msdn.microsoft.com/Forums/en-US/e11a86ef-3be2-4256-92e9-d12809f2a6ca/error-0x80040d10 ...

  5. [IE编程] 多页面基于IE内核浏览器的代码示例

    有不少人发信问这个问题,我把答案贴在这里: 建议参考 WTL (Windows Template Library) 的代码示例工程TabBrowser  (在WTL目录/Samples/TabBrow ...

  6. git设置对比工具

    windows下设置 beyond compare 3 为 git  的对比工具. 首先需要先安装 beyond compare 3 工具,切记需要安装安装版的,不要搞绿色版的. mac下使用 Kal ...

  7. bzoj2489

    这种题完全可以暴力找规律,暴力打表各种搞法 这里有一篇比较全面的题解:http://acm.uestc.edu.cn/bbs/read.php?tid=3698&page=1&tore ...

  8. Math.trunc

  9. linux 定时任务调度Cron的用法详解

    在linux中,推荐使用crontab -e命令添加自定义的任务,退出后重启crond进程. 重新启动cron服务或重新加载cron配置,命令: 复制代码代码示例: /etc/rc.d/init.d/ ...

  10. TransparentBlt、StretchBlt与BitBlt三个函数的区别

    jackyhwei 发布于 2011-10-13 10:55 点击:1080次  来自:blog.csdn.net/weiqubo BOOL StretchBlt( int x, //指定目的矩形区域 ...