您的位置:首页 > 其它

HDU-1272-小希的迷宫

2012-08-25 19:05 253 查看
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1272

/*
程序分析:
题目意思其实就是让你判断一个图是不是一棵树,条件就是无环、连通图,即连通分支为一
解决方法:
利用并查集,把输入的房间视为一个点,有路径的就连成一起,只要找到了环,就可以判定为NO了,
如果到输入最后都还没找到环就只剩两种可能了,一种就是只有一棵书,一种就是有一个以上的树,这样也可以判定是否符合问题要求了。
*/

View Code

#include<iostream>
#include<string>
using namespace std;
bool used[100001];
int r[100001];
int find(int x)
{
while(r[x]!=x)
x=r[x];
return x;
}
int uni(int x,int y)
{
x=find(x);
y=find(y);
if(x=y)return 0;
r[x]=y;
return 1;
}
int main()
{
int n,m,flag,i,t;
while(cin>>n>>m)
{
if(n==-1&&m==-1)return 0;
if(n==0&&m==0)
{
cout<<"Yes\n";
continue;
}
memset(used,0,sizeof(used));
for(i=0;i<100001;i++)
{
r[i];
}
uni(n,m);
used
=used[m]=1;t=1;
flag=1;
while(cin>>n>>m)
{
if(n==0&&m==0)break;
if(used
==0){t++;used
=1;}
if(used[m]==0){t++;used[m]=1;}
if(uni(n,m)==0)flag=0;
else t--;
}
if(flag&&t==1)cout<<"Yes\n";
else cout<<"No\n";
}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: