P1551 亲戚
简介
一道很水的并查集,就是模板
题目
规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。
思路
用并查集,不断输入的同时不断unite(联系)
代码
#include <bits/stdc++.h>
#define N 5050
using namespace std;
typedef long long ll;
ll n,m,p,id[N],x,y;
ll find(ll x){
return id[x]==x?x:id[x]=find(id[x]);
}
void unite(ll x,ll y){
ll xi=find(x),yi=find(y);
id[xi]=yi;
}
int main(){
cin>>n>>m>>p;
for(ll i=0;i<n;i++)id[i]=i;
for(int i=1;i<=m;i++){
cin>>x>>y;
unite(x,y);
}
for(int i=1;i<=p;i++){
cin>>x>>y;
if(find(x)==find(y)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}