并查集?
2025-12-21 19:44:21
发布于:浙江
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int n,m,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){
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;
for(int i=1;i<=n;i++)fa[i]=i,hei[i]=1;
while(m--){
int op,x,y;
cin >> op >> x >> y;
x=find(x),y=find(y);
if(op==1){
insert(x,y);
}else{
cout << (x==y?"Y\n":"N\n");
}
}
return 0;
}
参考自洛谷题解链接描述,谢谢大佬的题解让我自学并查集。
这里空空如也












有帮助,赞一个