考察并查集的基本操作。
以下是我的代码:
#include<stdio.h>
#define maxn 5007
long n,m,p,f[maxn];
long Getf(long x)
{
if(f[x]==x) return x;
f[x]=Getf(f[x]);
return f[x];
}
void Union(long x,long y)
{
long fx=Getf(x),fy=Getf(y);
if(fx!=fy)
f[fx]=fy;
}
int main()
{
long a,b;
scanf("%ld%ld%ld",&n,&m,&p);
for(long i=1;i<=n;i++) f[i]=i;
for(long i=1;i<=m;i++)
{
scanf("%ld%ld",&a,&b);
Union(a,b);
}
for(long i=1;i<=p;i++)
{
scanf("%ld%ld",&a,&b);
if(Getf(a)==Getf(b))
printf("Yes\n");
else printf("No\n");
}
return 0;
}
posted on 2010-03-21 21:32
lee1r 阅读(109)
评论(0) 编辑 收藏 引用 所属分类:
题目分类:数据结构