P1551 亲戚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
并查集
1.初始化
void init(int k)
{
for(int i=0;i<k;i++)
{
fa[i] = i;
}
}
2.查询
int find(int i)
{
if(fa[i] == i) return i;
else{
fa[i] = find(fa[i]);
return fa[i];
}
}
3.合并
void unionn(int i,int j)
{
int i_ = find(i);
int j_ = find(j);
fa[i_] = j_;
}
ac代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
const int N=5005;
vector<int>fa(N);
void init(int k)
{
for(int i=0;i<k;i++)
{
fa[i] = i;
}
}
int find(int i)
{
if(fa[i] == i) return i;
else{
fa[i] = find(fa[i]);
return fa[i];
}
}
void unionn(int i,int j)
{
int i_ = find(i);
int j_ = find(j);
fa[i_] = j_;
}
int main()
{
IOS;
int n,m,p;
cin>>n>>m>>p;
init (n);
while(m--)
{
int a,b;
cin>>a>>b;
unionn(a,b);
}
while(p--){
int a,b;
cin>>a>>b;
if(find(a)==find(b)) //查询是否是同一个祖先
{
cout<<"Yes"<<endl;
}
else cout<<"No"<<endl;
}
return 0;
}