#include<stdio.h>
#include<string.h>
int an[100002],ma[100002];
int find(int x)
{
int b=x;
while(an[x]!=x)
x=an[x];
int j;
while(b!=x)
{
j=an[b];
an[b]=x;
b=j;
}
return x;
}
int lt(int x,int y)
{
x=find(x);
y=find(y);
if(x!=y)
an[x]=y;
else
return 0;
return 1;
}
int main()
{
int x,y;
while(scanf("%d%d",&x,&y))
{
memset(ma,0,sizeof(ma));
for(int i=1;i<=100000;i++)
an[i]=i;
int fa,fal=0;
while(x+y)
{
if(x+y==-2)
break;
else
{
fa=lt(x,y);
if(fa==0)
{
printf("No\n");
fal=1;
}
ma[x]=1;
ma[y]=1;
scanf("%d%d",&x,&y);
}
}
if(x+y==-2)
break;
if(fal==0)
{
int k=-1;
for(int i=1;i<=100000;i++)
{
if(an[i]==i&&ma[i])
k++;
}
if(k==-1||k==0)
printf("Yes\n");
else
printf("No\n");
}
}
return 0;
}
hdu 1272 并查集模版
最新推荐文章于 2017-07-18 21:20:34 发布