#include<iostream>
#include<stdio.h>
using namespace std;
int mark[100005];
int f[100005];
int flag;
int find(int a)
{
int r=a;
while(r!=f[r])
r=f[r];
int i=a;
int j;
while(i!=r)
{
j=f[i];
f[i]=r;
i=j;
}
return r;
}
void unite(int a,int b)
{
int A,B;
A=find(a);
B=find(b);
if(A!=B)
{
f[A]=f[B];
}
else
{
flag=0; //有多条路径
}
}
int main()
{
int a,b;
while(cin>>a>>b)
{
if(a==0&&b==0)
{
cout<<"Yes"<<endl;
continue;
}
if(a==-1&&b==-1)
{
break;
}
for(int i=1;i<100005;i++)
{
mark[i]=0; f[i]=i;
}
unite(a,b);
mark[a]=mark[b]=1;
flag=1;
while(cin>>a>>b)
{
if(a==0&&b==0)
break;
mark[a]=mark[b]=1;
unite(a,b);
}
if(flag==0)
{
cout<<"No"<<endl;
continue;
}
int count=0;
for(int j=1;j<100005;j++)
{
if(mark[j]&&f[j]==j)
{
count++;
}
}
if(count==1)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
HDU1272(并查集)
最新推荐文章于 2021-09-09 16:08:54 发布