[HDOJ]problem_1272【小希的迷宫】:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int father[100005];
int find(int n )
{
while (father[n]!=n)
n=father[n];
return n;
}
int main()
{
int i,j,a,b,k,sum;
while (1)
{
k=0;sum=0;
memset(father,0,sizeof(father));
while (scanf("%d %d",&a,&b),(a&&b))
{
if (a==-1&&b==-1) return 0;
if (!father[a]) father[a]=a;
if (!father[b]) father[b]=b;
if (find(a)==find(b))
k++;
else
father[find(b)]=find(a);
}
for (i=1;i<=100000;i++)
{
if (father[i]&&find(i)==i)
sum++;
}
if (sum>1||k)
printf("No\n");
else
printf("Yes\n");
}
}
今天刚学的并查集,试试手,结果在一些小问题上纠结了好久,比如输出的Yes和No,写成小写了,死活过不了;后来最后又多了个空行,格式错误。好吧,这题意,不说什么了。总之,过了就好啊!