#include <iostream>
#include <string.h>
using namespace std;
int father[100010];
int visit[100010];
int find(int x)
{
int r=x;
while(r!=father[r])
r=father[r];
int i=x,j;
while(i!=r)
{
j=father[i];father[i]=r;i=j;
}
return r;
}
void merge(int x,int y)
{
int a=find(x);
int b=find(y);
if(a!=b)
{
if(a<b)
father[a]=b;
else
father[b]=a;
}
}
int main()
{
int a,b,i,flag,max,num;
memset(visit,0,sizeof(visit));
for(i=0;i<100010;i++)
father[i]=i;
flag=1;
max=0;
num=0;
while(cin>>a>>b)
{
if(a==-1&&b==-1)
break;
if(a==0&&b==0)
{
for(i=0;i<=max;i++)
if(visit[i]&&father[i]==i)
{
num++;
}
if(num>1)
flag=0;
if(flag==0)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
memset(visit,0,sizeof(visit));
for(i=0;i<100010;i++)
father[i]=i;
flag=1;
max=0;
num=0;
continue;
}
if(a>max) max=a;
if(b>max) max=b;
visit[a]=1;
visit[b]=1;
if(find(a)==find(b))
{flag=0;}
else
merge(a,b);
}
return 0;
}
hdu1272
最新推荐文章于 2022-12-14 05:30:22 发布