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身为大二学长,他乐于 ...
随机推荐
- MyBatis学习(二):与Spring整合(非注解方式配置MyBatis)
搭建SpringMVC的-->传送门<-- 一.环境搭建: 目录结构: 引用的JAR包: 如果是Maven搭建的话,pom.xml的配置如下: <?xml version=" ...
- mysql启动warning: World-writable config file
如果在启动warning: World-writable config file /home/mysql/my.cnf is ignored原因:my.cnf的读取权限进行了设置,不允许World-w ...
- Html5的placeholder属性(IE兼容)
HTML5对Web Form做了很多增强,比方input新增的type类型.Form Validation等. Placeholder是HTML5新增的还有一个属性,当input或者textarea设 ...
- MVC入门——列表页
创建控制器UserInfoController using System; using System.Collections.Generic; using System.Linq; using Sys ...
- WPF popup控件的使用
<Window x:Class="WPFPopup.RuntimePopup" xmlns="http://schemas.microsoft.com/wi ...
- 富文本编辑器 - RichEditor
基本功能 RichEditor 是一个继承自 WebView 的自己定义 view,枚举类型 Type 定了它所支持的排版格式: public enum Type { BOLD, ITALIC, SU ...
- Hadoop - YARN 概述
一 概述 Apache Hadoop YARN (Yet Another Resource Negotiator,还有一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源 ...
- 【BZOJ3052】[wc2013]糖果公园 带修改的树上莫队
[BZOJ3052][wc2013]糖果公园 Description Input Output Sample Input Sample Input Sample Output 84 131 27 84 ...
- g++: command not found的解决
G++没有装或却没有更新 以下方法都可以试试: centos: yum -y update gcc yum -y install gcc+ gcc-c++ ubuntu: apt-get up ...
- ssh key 生成
1.设置好git的name和email $ git config --global user.name "姓名" $ git config --global user.email ...