#include"iostream"
#include"cstdio"
#include"cstdlib"
#include"cstring"
using namespace std;
bool book[200000];
int edge=0;
int point=0;
int x,y;
int fa[200000];
int deep[200000];
int flag=0;
void init()
{
for(int i=1;i<=200000;i++)
{
fa[i]=i;
deep[i]=0;
}
}
int find(int x)
{
if(fa[x]==x) return x;
else
{
return fa[x]=find(fa[x]);
}
}
void unit(int x,int y)
{
x=find(x);
y=find(y);
if(x==y) return ;
else
{
if(deep[x]>deep[y]) fa[y]=x;
else
{
fa[x]=y;
if(deep[x]==deep[y]) deep[y]++;
}
}
}
bool same(int x,int y)
{
return find(x)==find(y);
}
int main()
{
x=y=0;
while(1)
{
memset(book,0,sizeof(book));
flag=0;
edge=0;
point=0;
init();
while(1)
{
scanf("%d%d",&x,&y);
if(x==0&&y==0)
{
getchar();
break;
}
if(x==-1&&y==-1) exit(0);
if(same(x,y))
{
flag=1;
}
else
{
unit(x,y);
edge++;
if(book[x]==0) point++;
if(book[y]==0) point++;
book[x]=book[y]=1;
}
}
if(flag==0&&point==edge+1) cout<<"Yes"<<endl;
else
{
if(flag==0&&point==edge&&point==0) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
return 0;
}
HDU 并查集 1272
最新推荐文章于 2021-09-09 16:08:54 发布