题解
2025-11-30 17:21:01
发布于:广东
0阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int fa[N];
int find(int inx){ //找最大的祖先
if(fa[inx]==inx)return inx;
return fa[inx]=find(fa[inx]);//并查集
}
int n,m;
void solve(){
for(int i=1;i<=n;i++)fa[i]=i;//并查集初始化
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
fa[find(a)]=find(b);//合并集合
}
int cnt=0;
for(int i=1;i<=n;i++){
if(fa[i]==i)cnt++;//统计集合数量
}
cout<<cnt-1<<endl;
}
int main(){
int t=1;
// cin>>t;
while(cin>>n>>m){
solve();
}
}
这里空空如也



有帮助,赞一个