并查集附庸
#include<bits/stdc++.h>
using namespace std;
const int MAXN=20000;
//并查集,我的附庸的附庸是我的附庸
int find(vector<int>& parent,int x){
if(parent[x]!=x){
parent[x]=find(parent,parent[x]);
}
return parent[x];//递归出口,找到了根节点
}
void join(int x,int y,vector<int>& parent){
int rootx=find(parent,x);
int rooty=find(parent,y);
if(rootx!=rooty){
parent[rooty]=rootx;//确定附庸关系
}
}
int main(){
int n;
cin>>n;
int q;
vector<int> parent(MAXN);
for(int i=0;i<MAXN;i++){
parent[i]=i;
}
for(int i=0;i<n;i++){
int u,v;
cin>>u>>v;
join(u,v,parent);
}
cin>>q;
while(q--){
int a,b;
cin>>a>>b;
if(parent[a]==parent[b]) cout<<1<<endl;
else cout<<0<<endl;
}
return 0;
}
欢迎批评指正!