并查集模板

//并查集模板 亲戚
#include<cstdio>
using namespace std;
int father[5005];

int f(int x){  //寻找每个结点的父亲结点
int r=x;
while(father[r]!=r){
r=father[r];
}
return r;
}

int add(int x,int y){
int fx=f(x);
int fy=f(y);
return father[fx]=fy; //x.y无序,因为不是按树的结构存储,而是按集合
}

int main(){
int n,m,p;
scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=n;i++) father[i]=i;
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
if(f(x)!=f(y)){
add(x,y);
}
}
for(int i=1;i<=p;i++){
int x,y;
scanf("%d%d",&x,&y);
if(f(x)==f(y)){
puts("Yes");
}
else puts("No");
}
return 0;
}

posted @ 2021-03-28 12:55  starlightlmy  阅读(46)  评论(0)    收藏  举报