HDU - 1272 小希的迷宫 并查集判断无向环及连通问题 树的性质
小希的迷宫
Input输入包含多组数据,每组数据是一个以0 0结尾的整数对列表,表示了一条通道连接的两个房间的编号。房间的编号至少为1,且不超过100000。每两组数据之间有一个空行。
整个文件以两个-1结尾。
Output对于输入的每一组数据,输出仅包括一行。如果该迷宫符合小希的思路,那么输出"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 并查集好题。并查集判断无向图环及连通问题,利用无向图(实质为一棵树)的性质,若合并两点根节点相同则合并后形成环,根节点的个数即为连通分支的个数。
#include<stdio.h> int f[],b[],c;
int find(int x)
{
return f[x]==x?x:f[x]=find(f[x]);
}
void join(int x,int y)
{
int fx=find(x),fy=find(y);
if(fx!=fy) f[fy]=fx;
else c=; //若并的两点根节点相同,合并后形成环
}
int main()
{
int x,y,z,min,max,i;
while(scanf("%d%d",&x,&y)&&!(x==-&&y==-)){
if(x==){
printf("Yes\n"); //还是不懂。。什么都没有就满足?
continue;
}
min=;max=;
for(i=;i<=;i++){
f[i]=i;
b[i]=;
}
join(x,y);
b[x]=;b[y]=;
if(x>max) max=x;if(x<min) min=x;
if(y>max) max=y;if(y<min) min=y;
c=;z=;
while(scanf("%d%d",&x,&y)&&!(x==&&y==)){
join(x,y);
b[x]=;b[y]=;
if(x>max) max=x;if(x<min) min=x;
if(y>max) max=y;if(y<min) min=y;
if(c==&&z==){
z=;
printf("No\n");
} //判断环
}
if(c==){
int co=;
for(i=min;i<=max;i++){
if(f[i]==i&&b[i]) co++;
}
if(co!=) printf("No\n",co);
else printf("Yes\n"); //判断连通(根节点的个数为连通分支的个数)
}
}
return ;
}
一题多解,还可以利用树的性质,点数=边数+1。
#include<stdio.h>
#include<string.h>
int main()
{
int n,c,cc,max,min,x,y,i;
int a[];
while(scanf("%d%d",&x,&y)&&!(x==-&&y==-)){
if(x==){
printf("Yes\n");
continue;
}
memset(a,,sizeof(a));
c=;max=;min=;
a[x]=;a[y]=;
c++;
if(x>max) max=x;if(x<min) min=x;
if(y>max) max=y;if(y<min) min=y;
while(scanf("%d%d",&x,&y)&&!(x==&&y==)){
a[x]=;a[y]=;
c++;
if(x>max) max=x;if(x<min) min=x;
if(y>max) max=y;if(y<min) min=y;
}
cc=;
for(i=min;i<=max;i++){
if(a[i]==) cc++;
}
if(cc==c+) printf("Yes\n"); //点数=边数+1
else printf("No\n");
}
return ;
}
HDU - 1272 小希的迷宫 并查集判断无向环及连通问题 树的性质的更多相关文章
- <hdu - 1272> 小希的迷宫 并查集问题 (注意特殊情况)
本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 Problem Description: 上次Gardon的迷宫城堡小希玩了很久(见Probl ...
- HDU 1272 小希的迷宫 并查集
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- (step5.1.6)hdu 1272(小希的迷宫——并查集)
题目大意:输入一系列的点,判断这些点组成的图符不符合小希的思路(无环.连通) 解题思路: 1)如果两个节点的根节点相同,那么在这两个节点之间添加1条边以后,这个图肯定有环路. 2)孤立节点:被使用过& ...
- hdu 1257 小希的迷宫 并查集
小希的迷宫 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1272 D ...
- hdu1272小希的迷宫(并查集判断回路和是否连通)
传送门 迷宫中不能有回路,还要连通 如果最后集合数是一个那就是连通,否则不联通 要合并的两个顶点在相同集合内,表示出现了回路 输入时注意一下 #include<bits/stdc++.h> ...
- hdu-1272 小希的迷宫---并查集或者DFS
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1272 题目大意: Problem Description 上次Gardon的迷宫城堡小希玩了很久(见 ...
- HDU 1272小希的迷宫(裸并查集,要判断是否构成环,是否是连通图)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1272 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 1272 小希的迷宫(并查集+最小生成树+队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1272 小希的迷宫 (并查集)
小希的迷宫 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/L Description 我们的小伙伴Bingo身为大二学长,他乐于 ...
随机推荐
- g++ 6.4编译opencv-2.4.10报错记录
fetch公司的项目进行编译,此项目依赖opencv库.由于本人一直比较偏爱fedora,但也因此给我带来了许多"乐趣"(麻烦).fedora一直走得比较前沿,g++ 6.3了 ...
- 记录-外挂recovery的制作(魅蓝note)
安卓的开源使其具有很强的可定制性,对于用户来说很具有可玩性.玩机一般来说就是解锁BootLoader刷入第三方recovery,利用第三方recovery刷第三方ROM,刷supersu获取root权 ...
- Centos7-安装Apache2.4+PHP5.6
linux系统CentOS7先下载Apache需要依赖的软件1.APR下载地址http://apr.apache.org/download.cgiwget下载路径http://mirror.bit.e ...
- Html5的placeholder属性(IE兼容)
HTML5对Web Form做了很多增强,比方input新增的type类型.Form Validation等. Placeholder是HTML5新增的还有一个属性,当input或者textarea设 ...
- ios 博客集合
ryantang03 http://blog.csdn.net/ryantang03/article/category/1073221 kmyhy http://blog.csdn.net ...
- TCP协议和socket API 学习笔记
本文转载至 http://blog.chinaunix.net/uid-16979052-id-3350958.html 分类: 原文地址:TCP协议和socket API 学习笔记 作者:gilb ...
- javaweb开发之javaBean
一.JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁.JSP搭配JavaBean来使用 ...
- java编程思想-基础
interface: 方法默认为public:成员变量默认 static and final 对象数组的定义:理解? 多接口继承:可以多个接口,但只有一个具体类,具体类在前面 自:多接口继承时,来自不 ...
- servlet过滤器Filter(理论篇)
为了减少servlet容器在服务器端对信息的判断量,产生了servlet过滤器. servlet过滤器是在java servlet规范2.3中定义的,他能够对servlet容器的请求和响应对象进行检查 ...
- tkinter.py
from tkinter import * def hello():print('hello world') win=Tk() win.title('hello tkinter') win.geome ...