算法思路
用于海量集合的合并及查询。
精髓在于路径压缩。
具体瞅代码
于2017年重新更改了代码风格。
代码
#include<iostream>
#include<cstdio>
using namespace std;
int x,y,n,m,q;
int fa[20020];
int find (int x)
{
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
void unionn(int x,int y)
{
int r1=find(x),r2=find(y);
if(r1!=r2) fa[r2]=r1;
}
int main()
{
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)
{
fa[i]=i;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
unionn(x,y);
}
for(int i=1;i<=q;i++)
{
scanf("%d%d",&x,&y);
if(find(x)==find(y)) printf("Yes\n");
else printf("No\n");
}
return 0;
}