专栏文章
题解:AT_joisc2007_fiber 光ファイバー (Fiber)
AT_joisc2007_fiber题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mips4z4x
- 此快照首次捕获于
- 2025/12/03 17:03 3 个月前
- 此快照最后确认于
- 2025/12/03 17:03 3 个月前
思路:
这一题要问至少要加多少边才能使图联通。为了加的变最少,我们容易想到把原来图中所要的联通块连接在一起,这时答案就是联通块数减 ,用并查集维护一下就行了。
代码:
CPP#include<bits/stdc++.h>
//#define int long long
using namespace std;
int n,m,f[30005];
int find(int x){
if(f[x]==x) return x;
return f[x]=find(f[x]);
}
void u(int a,int b){
f[find(a)]=find(b);
}
signed main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<30005;++i) f[i]=i;
int ans=-1;
while(m--){
int a,b;cin>>a>>b;
u(a,b);
}
for(int i=1;i<=n;++i){
if(f[i]==i) ++ans;
}
cout<<ans<<'\n';
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...