题解
2025-12-27 15:45:27
发布于:浙江
2阅读
0回复
0点赞
很简单的并查集模版。先把每个亲戚合并,之后判断是不是一个祖先就行。
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int n,m,p,fa[N],hei[N];
int find(int x){
if(fa[x]==x)return x;
else return fa[x]=find(fa[x]);
}
void insert(int x,int y){
x=find(x),y=find(y);
if(x==y)return;
if(hei[y]<hei[x])swap(x,y);
if(hei[x]==hei[y])hei[y]=hei[x]+1;
fa[y]=x;
}
signed main(){
cin >> n >> m >> p;
for(int i=1;i<=n;i++)fa[i]=i,hei[i]=1;
while(m--){
int x,y;
cin >> x >> y;
insert(x,y);
}while(p--){
int x,y;
cin >> x >> y;
cout << (find(x)==find(y)?"Yes\n":"No\n");
}
return 0;
}
这里是按秩合并+路径压缩优化,所以复杂度是 。至于这个 是个啥你不用了解。反正对于 总有
这里空空如也







有帮助,赞一个