小希的迷宫

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 49592    Accepted Submission(s): 15408

Problem Description
上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,但是最后一个却有两种方法从5到达8。
Input
输入包含多组数据,每组数据是一个以0 0结尾的整数对列表,表示了一条通道连接的两个房间的编号。房间的编号至少为1,且不超过100000。每两组数据之间有一个空行。
整个文件以两个-1结尾。
Output
对于输入的每一组数据,输出仅包括一行。如果该迷宫符合小希的思路,那么输出"Yes",否则输出"No"。
Sample Input
6 8 5 3 5 2 6 4 5 6 0 08 1 7 3 6 2 8 9 7 5 7 4 7 8 7 6 0 03 8 6 8 6 4 5 3 5 6 5 2 0 0-1 -1
Sample Output
Yes Yes No

这道题简单分析就是任意两个房间都相互连通,并且仅有一条路! 一方面需要考虑任意两个房间存不存在多条路,另一方面又要考虑有没有全连通(即存在独立的个体,
在整体之外自成一派,这样的话它与整体内的任意一个房间都不连通,那么必然输出No!
至于怎么判断两个房间之间有没有多条路,输入房间A,B A与B之间互通,如果A的根节点与B的根节点相同,这就意味着A->B不仅可以直接走A到B这条新路,A还可以
通过上级房间先走到根节点然后再走去B,显然就存在两条路啦~
#include<iostream>
#include<cstring>
using namespace std;
int pre[100005];
int vis[100005];int find(int x)   //寻找根节点
{int r=x;while(r!=pre[r]){r=pre[r];}int i=x,j;while(r!=pre[i]) //亚索路径 {j=pre[i];pre[i]=r;i=j;}return r;
}int main()
{while(1){int a,b;for(int i=1;i<=100000;i++) //初始化,每个房间的根节点都是它自己。 pre[i]=i;memset(vis,0,sizeof(vis));int flag=0;while(scanf("%d%d",&a,&b)!=EOF){if(a==0&&b==0)    break;if(a==-1&&b==-1)    break;vis[a]=vis[b]=1;int fx=find(a),fy=find(b);if(fx!=fy)pre[fy]=fx;elseflag=1;}if(a==-1&&b==-1)    break;int root=0;for(int i=1;i<=100000;i++)  //检查全连通性 {if(vis[i]==1&&find(i)==i) // find(i)也可以写成pre【i】 root++;}if(root>1)    flag=1;if(flag==1)    cout<<"No"<<endl;elsecout<<"Yes"<<endl;}return 0;
}

对于一个整体,遍历每一个i,执行find(i),他们的根节点都相同,只有根节点那个房间的find[i]==i,所以必定会执行一次root++;

当然,如果使用pre[i]进行遍历,同样也只有根节点的pre[i]==i QAQ~~ 如果存在其他独立的帮派,那么root必然大于1了咯!

HDU1272(小希的迷宫) 并查集相关推荐

  1. HDOJ---1272 小希的迷宫[并查集]

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

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

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

  3. B - 小希的迷宫 (并查集判断是否存在环)

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

  4. HDU1272 小希的迷宫【并查集】

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

  5. hdu1272 小希的迷宫

    这是一道考察并查集的题目,刚开始想的复杂了,A过之后又整理了一下思路重写了一遍. 下面是整理过的代码和思路: 首先因为输入的编号可能不是连续的,所以要记录每个点走过没走过.还有就是输入是以0结束为标志 ...

  6. 集合数据hdu1272(小希迷宫 并查集)

    查了好多资料,发现还是不全,干脆自己整理吧,最少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! Problem Description 前次Gardon的迷宫城堡小希玩了很久(见Probl ...

  7. hdu1272(小希迷宫 并查集)

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

  8. 小希的迷宫-HDU-1272(并查集or树性质)

    题目链接:小希的迷宫 并查集: 无回路 单连通 并查集做,首先想到的是判断两个点是否连通,不连通就合并,已连通的话说明会形成回路,则可以判定No,交了一发错了. 想了一下没有考虑到多个连通域的情况,该 ...

  9. hdu 1272 小希的迷宫 (并查集)

    小希的迷宫                                                                          Time Limit: 2000/1000 ...

最新文章

  1. Xcode:Task failed with exit 1 signal 0 {
  2. 字符串和json之间的互相转化
  3. Mvc中使用MvcSiteMapProvider实现站点地图之基础篇
  4. java 复制剪贴板_java_swing复制粘贴、剪贴板
  5. id3决策树_信息熵、信息增益和决策树(ID3算法)
  6. 判断一个指针有没有free_Free Code Camp的每个人现在都有一个档案袋
  7. 重命名myclipse中web项目名称的过程
  8. 深挖Kubernetes存储为何如此难及其解决方案
  9. Spring框架学习笔记07:基于XML配置方式使用Spring MVC
  10. lzw编码过程详解_【手打】LZW编码的C/C++实现
  11. CO-PA: 获利能力分析类型(基于成本核算、基于会计核算)解析
  12. BP神经网络算法基本原理,基于bp的神经网络算法
  13. autocad 如何摆正显示_AutoCAD使用技巧问答
  14. mysql 启动失败 详情_mysql启动失败一例
  15. 计算机专业座谈会问题,我院计算机专业开展专业抽检主题座谈会
  16. 程序的可维护性和可扩展性
  17. 课后作业——Day5
  18. 第五章 机械加工工艺过程设计 小结
  19. 教会舍友玩 Git (再也不用担心他的学习)
  20. 英译汉在线翻译器如何实现英文语音翻译中文

热门文章

  1. R区别Python优劣
  2. 微服务究竟是“灵丹”还是“毒药”? | 文末送书
  3. 细节决定成败——Java命名规范
  4. 小程序蓝牙打印机CPCL图片打印问题梳理
  5. 服务器显卡不能显示器,显卡与显示器的故障排除方法大全
  6. 年轻化、智能化、时尚化能否撬动个护家电市场?
  7. 跨境电商小白开店必看——亚马逊从里到外全面解析+站点介绍
  8. 读取卡文件EFEPSNSC失败导致不搜网问题分析
  9. android9.0 MTK开始预览流程分析
  10. 小米手机必败无疑 安卓系统大战爆发前夕