#include<bits/stdc++.h>
using namespace std;
#define maxn 200001
int father[maxn];
int m,n,i,x,y,q;
int find(int x)
{
if(father[x]!=x)return find(father[x]);
else return x;//找根;//递归找寻最根点;
}
void unionn(int r1,int r2)
{
father[r2]=r1;
}
int main()
{
cin>>n>>m;
for(i=1;i<=n;i++)
father[i]=i;
for(i=1;i<=m;i++)
{
cin>>x>>y;//////////////////x,y有亲戚关系,下面询问谁和谁有远近亲关系
int r1=find(x);
int r2=find(y);
if(r1!=r2)unionn(r1,r2);
}
cin>>q;
for(i=1;i<=q;i++)
{
cin>>x>>y;
if(find(x)==find(y))cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;//3,4,//7,10//8,9//
}
并查集之亲戚联通
最新推荐文章于 2023-05-02 14:03:02 发布