题解:P16237 [蓝桥杯 2026 省 B] 应急布线
jiezecheng · · 题解
题意理解
给定一张
需要求出:
- 至少添加多少条边(记作
K )。 - 在添加
K 条边使得图连通的所有方案中,新边带来的节点度数的最大值最小值。
注意:原图中已有的边不计入新边度数。
最少加边数
原有
最小化最大度数
设每个块有
故答案为
实现
用并查集统计连通分量个数
时间复杂度:并查集近似
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int fa[N];
int Find(int x){
if(fa[x]==x) return x;
return fa[x]=Find(fa[x]);
}
void Union(int x,int y){
fa[Find(x)]=Find(y);
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
Union(a,b);
}
int cnt=-1;
for(int i=1;i<=n;i++) cnt+=(Find(i)==i);
cout<<cnt<<" "<<((2*cnt+n-1)/n);
}