这是一道中文的题目,题目意思就不需要多说了,大概意思是给一些数据能够从中找到一条没有回路的图,这就想到并查集了。
#include<stdio.h>
#include<string.h>
int arr[100005];
int sign[100005];
int findx(int x)
{
int r=x;
while(r!=arr[r])
r=arr[r];
return r;
}
void merge(int x, int y)
{
int fx=findx(x);
int fy=findx(y);
if(fx!=fy)
arr[fx]=fy;
}
int main()
{
int a,b;
while(1)
{
for(int i=0;i<100005;i++)
arr[i]=i;
memset(sign,0,sizeof(sign));
int flag=1;
while(scanf("%d%d",&a,&b))
{
if((a==-1&&b==-1)||(a==0&&b==0))
break;
sign[a]=1;
sign[b]=1;
if(findx(a)==findx(b))
flag=0;
else
merge(a,b);
}
if(a==-1&&b==-1)
break;
int count=0,p=0;
for(int i=1;i<=100005;i++)
{
if(sign[i]&&arr[i]==i)
count++;
if(sign[i]>0)
p++;
}
if(p==0||(count==1&&flag==1))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}