(并查集)小希的迷宫 --HDU -- 1272

时间:2023-01-07 20:43:45

链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1272

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#problem/M

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<iostream>
using namespace std; #define N 105000
#define INF 0xfffffff
#define max(a,b) (a>b?a:b) int f[N]; void Inn()
{
int i;
for(i=; i<N; i++)
f[i]=i;
} int Find(int x)
{
while(x!=f[x])
x = f[x];
return f[x];
}
int main()
{
int a,b,i,flag[N],aa=,bb=, j, ans=; memset(flag,,sizeof(flag));
Inn(); while()
{ scanf("%d %d",&a,&b); if(a==-&&b==-)
break; if(!a&&!b)
{
if(!aa && !bb)
printf("Yes\n");
else if(ans==)
printf("No\n");
else if(aa==bb+)
printf("Yes\n");
else
printf("No\n"); aa=bb=ans=;
memset(flag,,sizeof(flag));
Inn();
continue;
} if(!flag[a])
{
flag[a]=;
aa++;
}
if(!flag[b])
{
flag[b]=;
aa++;
}
int na=Find(a);
int nb=Find(b); if(na!=nb)
{
f[na]=nb;
bb++;
}
else
ans=; }
return ;
}