题解 有注释
2025-08-06 09:27:34
发布于:上海
19阅读
0回复
0点赞
用的是并查集最常用的两种函数
#include<iostream>
using namespace std;
const int N=2e5+5;
int f[N];//代表i的祖先
int find(int x){//找x的祖先
if(f[x]==x)return x;
return f[x]=find(f[x]);//当前x的祖先
//find(f[x])找x祖先的祖先
}
void unite(int x,int y){
int rootx=find(x);//找x的祖先
int rooty=find(y);//找y的祖先
//如果x和y的祖先不同 就把y设为x祖先的祖先
if(rootx!=rooty)f[rootx]=rooty;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)f[i]=i;
for(int i=1;i<=m;i++){
int z,x,y;
cin>>z>>x>>y;
if(z==1)unite(x,y);
else {
if(find(x)==find(y))cout<<"Y\n";
else cout<<"N\n";
}
}
return 0;
}
这里空空如也
有帮助,赞一个