小希的迷宫

整个文件以两个-1结尾。
对于输入的每一组数据,输出仅包括一行。如果该迷宫符合小希的思路,那么输出"Yes",否则输出"No"。
6 8 5 3 5 2 6 4 5 6 0 0 8 1 7 3 6 2 8 9 7 5 7 4 7 8 7 6 0 0 3 8 6 8 6 4 5 3 5 6 5 2 0 0 -1 -1
Yes Yes No
#include<stdio.h>
#include<string.h>
int mark[100005];
int set[100005];
int find(int);
int way(int,int);
int main()
{
int a,b,i,flag,max,min,count;
while(scanf("%d%d",&a,&b)&&(a!=-1&&b!=-1))
{
flag=1;
max=-100;
min=1000000;
count=0;
memset(mark,0,sizeof(mark));
if(a==0&&b==0)
{
printf("Yes\n");
continue;
}
for(i=0;i<100005;i++)
{
set[i]=i;
}
while(a||b)
{
if(a>max)
{
max=a;
}
if(b>max)
{
max=b;
}
if(a<min)
{
min=a;
}
if(b<min)
{
min=b;
}
mark[a]=1;
mark[b]=1;
if(way(a,b)==0)
{
flag=0;
}
scanf("%d%d",&a,&b);
}
if(flag==0)
{
printf("No\n");
}
else
{
for(i=min;i<=max;i++)
{
if(mark[i]&&set[i]==i)
{
count++;
}
}
if(count==1)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
}
return 0;
}
int find(int t)
{
if(set[t]==t)
{
return t;
}
else
{
return set[t]=find(set[t]);
}
}
int way(int x,int y)
{
int tx,ty;
tx=find(x);
ty=find(y);
if(tx==ty)
{
return 0;
}
else
{
set[tx]=ty;
return 1;
}
}