不建图也能做!
2024-06-25 20:22:09
发布于:上海
4阅读
0回复
0点赞
Rt,用并查集维护点的连通性即可。并查集时间复杂度优秀,常数小,十分适合本题。
#include <iostream>
using namespace std;
const int MAXN = 5005;
int f[MAXN];
int fd(int x){
if(f[x]==x) return x;
return f[x]=fd(f[x]);
}
int main(){
int n,m;
cin>>n;
cin>>m;
for(int i=1;i<=n;i++) f[i]=i;
while(m--){
int m1,m2;
cin>>m1>>m2;
f[fd(m1)]=fd(m2);
}
int ans=0;
for(int i=1;i<=n;i++){
if(f[i]==i) ans++;
}
cout<<ans-1<<endl;
return 0;
}
这里空空如也
有帮助,赞一个