HDU 1272 小希的迷宫 (kruskal)
来源:互联网 发布:格瓦拉网络购票 编辑:程序博客网 时间:2024/06/14 09:09
题目描述
上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,但是最后一个却有两种方法从5到达8。
输入
输入包含多组数据,每组数据是一个以0 0结尾的整数对列表,表示了一条通道连接的两个房间的编号。房间的编号至少为1,且不超过100000。每两组数据之间有一个空行。
整个文件以两个-1结尾。
整个文件以两个-1结尾。
输出
对于输入的每一组数据,输出仅包括一行。如果该迷宫符合小希的思路,那么输出"Yes",否则输出"No"。
样例输入
6 8 5 3 5 2 6 45 6 0 08 1 7 3 6 2 8 9 7 57 4 7 8 7 6 0 03 8 6 8 6 45 3 5 6 5 2 0 0-1 -1
样例输出
YesYesNo
需要注意的是,他给出的点有可能构不成一个连同的树,而是两个或者更多的连通分支,这样也是不符合题意的。在判断是否有多条路可以到达的某一点,用并查集来判断,只需要找是否只有一个祖父节点就行。
#include<stdio.h>#include<string.h>#define N 0x3f3f3fint pre[100100],vis[100100];int find (int x){ if(pre[x]==x) return x; else return pre[x]=find(pre[x]);}int Union (int x,int y){ int tx=find(x); int ty=find(y); if(tx==ty) return 0; pre[tx]=ty; return 1;}int main(){ int i,j,a,b; while(scanf("%d%d",&a,&b)&&(a!=-1&&b!=-1)) { if(a==0&&b==0) { printf("Yes\n");// 0 0是一定要判断的 continue; } int max=-1,min=N; memset(vis,0,sizeof(vis)); for(i=0; i<100100; i++) pre[i]=i; int f=0,count=0; while(a||b) { if(a>max) max=a;//找到所有点在的区间 if(b>max) max=b; if(a<min) min=a; if(b<min) min=b; vis[a]=1; //记录已经有的点 vis[b]=1; if(!Union(a,b)) //合并节点,找父节点。 f=1; scanf("%d%d",&a,&b); } if(f==1) printf("No\n"); else { for(i=min; i<=max; i++) { if(vis[i]&&pre[i]==i) // 这个点不仅要在区间中,父节点还得是自己。 count++; } if(count==1) printf("Yes\n"); else printf("No\n"); } } return 0;}
1 0
- HDU 1272 小希的迷宫 (kruskal)
- HDU(1272)------小希的迷宫
- 小希的迷宫 hdu 1272
- HDU 1272 小希的迷宫
- hdu 1272 小希的迷宫
- hdu 1272 小希的迷宫
- hdu 1272 小希的迷宫
- HDU-1272-小希的迷宫
- HDU 1272 小希的迷宫
- [tree]hdu 1272 小希的迷宫
- HDU 1272 小希的迷宫
- Hdu 1272 小希的迷宫
- HDU-1272:小希的迷宫
- HDU 1272 小希的迷宫
- hdu 1272 小希的迷宫
- hdu 1272 小希的迷宫
- HDU 1272 小希的迷宫
- HDU 1272 小希的迷宫
- 在Android Studio中直接编译C/C++文件
- Android开发_Sharedpreferences_存储数据使用方法_完整Demo_AndroidStudio
- 关于static问题的分析
- tomcat无法关闭问题
- POJ2115 C Looooops 一元模线性方程
- HDU 1272 小希的迷宫 (kruskal)
- Tomcat发布多个项目抛出异常
- Mercurial ---hgignore
- LibVLC自定义插件目录,获取FPS方法
- liferay学习4--helloLiferay例子
- 1.工具类
- Android读取assets目录下文件数据内容
- javacript中的闭包
- Android ProGuard 混淆 详解