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 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
解题思路:简单并查集。这个题的条件与之前做过的题目条件不一样,以前做的题目条件中编号都是从1到n,但这道题就不一样了,输入的编号范围是随机的,因此需要用vis数组来标记读入端点的编号。还有一点必须特判整数对列表的第一对数是否为0 0,如果是也满足小希的思路,即输出"Yes"。把有相关边的两个端点归并到同一个集合时,需要查看它们是否有公共的祖先,如果有的话将构成回路,即不满足条件;否则合并成同一个集合,让它们有公共的祖先。最后如果只有一个连通图并且没有构成回路,则为"Yes",否则其他情况都是错误的。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
const int maxn = ;
int x,y,father[maxn];
bool flag,vis[maxn];//vis数组来标记读入有哪些点在一棵树中
void init(){
memset(vis,false,sizeof(vis));//全部初始化为未访问
for(int i=;i<maxn;++i)father[i]=i;
}
int find_father(int x){
while(father[x]!=x)x=father[x];
return x;
}
void unite(int x,int y){
x=find_father(x);
y=find_father(y);
if(x!=y)father[x]=y;
else flag=false;//如果在同一个集合,则不满足条件
}
int main()
{
while(cin>>x>>y){
if(x==- && y==-)break;
if(!x && !y){cout<<"Yes"<<endl;continue;}//此情况也满足条件
init();flag=true;
unite(x,y);vis[x]=vis[y]=true;
while(cin>>x>>y && (x+y)){unite(x,y);vis[x]=vis[y]=true;}
int k=;
for(int i=;i<maxn;++i){
if(vis[i] && father[i]==i)++k;//如果是读入的一棵树中的点,并且只有一个祖宗,则k++
if(k>){flag=false;break;}//如果k>1,说明不满足条件,直接退出
}
if(flag)cout<<"Yes"<<endl;//单一出口
else cout<<"No"<<endl;
}
return ;
}

题解报告:hdu 1272 小希的迷宫的更多相关文章

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

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

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

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

  3. hdu 1272 小希的迷宫 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 第二条并查集,和畅通工程的解法类似.判断小希的迷宫不符合条件,即有回路.我的做法是,在合并两个集 ...

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

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

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

    小希的迷宫 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/L Description 我们的小伙伴Bingo身为大二学长,他乐于 ...

  6. hdu 1272 小希的迷宫(java实现)

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

  7. hdu 1272 小希的迷宫

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

  8. HDU 1272 小希的迷宫(乱搞||并查集)

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

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

    <题目链接> 小希的迷宫 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的 ...

  10. HDU——1272小希的迷宫(并查集+拓扑排序)

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

随机推荐

  1. Python爬虫入门教程: 27270图片爬取

    今天继续爬取一个网站,http://www.27270.com/ent/meinvtupian/ 这个网站具备反爬,so我们下载的代码有些地方处理的也不是很到位,大家重点学习思路,有啥建议可以在评论的 ...

  2. java--删除链表偶数节点

    public class ListNode { int data;//当前节点的值 ListNode next = null;//是指向下一个节点的指针/引用 public ListNode(int ...

  3. [luoguP2038] 无线网络发射器选址(模拟)

    传送门 又是个模拟水题,考虑边界就好,连long long都不用开. ——代码 #include <cstdio> #include <iostream> int n, d, ...

  4. UVa - 12451 - Let's call SPaDe a SPaDe

    先上题目: Problem H: Let's call SPaDe a SPaDe Passing time, walking the passage, as you pass the String ...

  5. leetcode算法学习----逆波兰表达式求值(后缀表达式)

    下面题目是LeetCode算法:逆波兰表达式求值(java实现) 逆波兰表达式即后缀表达式. 题目:  有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式.同 ...

  6. ORACLE-020:ORACLE技巧002 批量操作表

    有时候须要批量操作一些表,比方授权,清空数据等.能够使用拼接sql语句的方式来实现. 比如.须要将一个用户中的全部表,授权查询权限给还有一个用户,能够拼接例如以下sql: select 'grant ...

  7. qt自己定义搜索框(超简单,带效果图)

    1. 什么也不要说.先上效果图: 2. 代码 头文件: #ifndef APPSEARCHLINE_H #define APPSEARCHLINE_H #include <QLineEdit&g ...

  8. centos6.2安装kvm虚拟机

    http://www.wenzizone.com/2012/03/06/centos_6-2_install_kvm.html KVM虚拟机简介 kernel-based Virtual Machin ...

  9. Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.embedded.FilterRegistrationBean

    Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.embedded.FilterRegistr ...

  10. V Server Ubuntu

    Ubuntu下代理伺服器通常使用squid 安裝 sudo apt-get install squid 修改squid.conf配置 sudo vim /etc/squid/squid.conf 公司 ...