您的位置:首页 > 其它

Hdu1272 - 小希的迷宫 - 并查集

2014-07-27 14:52 253 查看
#include<stdio.h>
#include<string.h>
int mark[100005];
int p[100005];
int find(int x)
{
while(p[x]!=x)
{
x=p[x];
}
return p[x];
}
int main()
{
int a,b,i;
while(scanf("%d%d",&a,&b)!=EOF)
{
for(i=0;i<100005;i++)
{
p[i]=i;
}
if(a==-1&&b==-1)
{
break;
}
if(a==0&&b==0)
{
puts("Yes");
continue;
}
int flag=1;
memset(mark,0,sizeof(mark));
int min=100005;
int max=0;
int count=0;
while(a!=0||b!=0)
{
if(a>max)
{
max=a;
}
if(b>max)
{
max=b;
}
if(a<min)
{
min=a;
}
if(b<min)
{
min=b;
}
a=find(a);
b=find(b);
if(a!=b)
{
p[a]=b;
}
else
{
flag=0;
}
mark[a]=1;
mark[b]=1;
scanf("%d%d",&a,&b);
}
if(flag==0)
{
puts("No");
continue;
}
for(i=min;i<=max;i++)
{
if(p[i]==i&&mark[i]==1)
{
count++;
}
}
if(count==1)
{
puts("Yes");
}
else
{
puts("No");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: