小希的迷宫
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 34545 Accepted Submission(s): 10573
![](https://i-blog.csdnimg.cn/blog_migrate/ce3d27d9f95d7ac87d47240232e2e0ba.jpeg)
整个文件以两个-1结尾。
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<cstdio>
#include<cstring>
#include<cstdlib>
#define N 100000
using namespace std;
int pre[N+100];
int vip[N+100];
int flag;
int find (int n)
{
int r=n;
while(r!=pre[r])
r=pre[r];
// int i,j;
// i=n;
// while(i!=r)
// {
// j=pre[r];
// pre[i]=r;
// i=j;
// }
pre[n]=r;
return r;
}
int join(int x,int y)
{
int f1,f2;
f1=find(x);
f2=find(y);
if(f1!=f2)
pre[f1]=f2;
else
flag=0;
}
int main()
{
int a,b;
// flag=1;
while(scanf("%d %d",&a,&b)!=EOF)
{
if(a==-1&&b==-1)
break;
if(a==0&&b==0)
{
printf("Yes\n");
continue;
}
for(int i=1;i<=100000;i++)
{
pre[i]=i;
vip[i]=0;
}
vip[a]=1;
vip[b]=1;
flag=1;
join(a,b);
while(scanf("%d %d",&a,&b),a||b)
{
vip[a]=1;
vip[b]=1;
join(a,b);
}
int ans=0;
for(int i=1;i<=100000;i++)
{
if(pre[i]==i&&vip[i])
ans++;
if(ans>1)
{
flag=0;
break;
}
}
//if(ans)
if(flag)
printf("Yes\n");
else printf("No\n");
}
return 0;
}