图的分割


题目大意:

给你n个点,m条边的图,没有重环和自环,所有的点都联通

可以通过删除几条边使得整个图变成两个联通子图

求删除的边中最大边权的最小值


解题思路:

看到“最大边权的最小值”就晓得是经典的二分题目了,所以整体的代码就是二分,现在考虑check()怎么写

(当然边需要经过排序后再去二分)

因为是通过删除几条边而使整个图一分为二,换句话说就是删除边之后的图有两个点集合,那么就可以想到用并查集来维护集合,每次check()时重置集合,将不删除的边连起来,看整个图中有几个集合


代码实现:

#include<bits/stdc++.h>
using namespace std;
// # define int long long
# define endl "\n"
const int N = 1e6+10;
int f[N];
int n,m;
int cnt[N];
struct node{
int a,b,v;
}a[N];
int find(int x){
if(f[x] == x) return x;
return f[x] = find(f[x]);
}
bool check(int mid){
for(int i = 1;i <= n;++i) f[i] = i,cnt[i] = 1;
for(int i = mid+1;i<=m;++i)//删除前mid个边,将后面的边连起来
{
int x = find(a[i].a);
int y = find(a[i].b);
if(x != y){
if(cnt[x]>cnt[y]) swap(x,y);//启发式合并
f[x] = y;
}
}
int cnt = 0;
for(int i = 1;i <= n;++i)//查看图中有几个集合
{
if(f[i] == i) cnt++;
}
return cnt>=2;
} void solve(){
cin>>n>>m; for(int i = 1;i <= m;++i){
cin>>a[i].a>>a[i].b>>a[i].v; }
sort(a+1,a+1+m,[&](node a,node b)->bool{
return a.v<b.v;
});//对边按边权排序
int l = 1,r = m;
int ans = 0;
while(l<=r){
int mid = l+r>>1;
if(check(mid)){
r = mid-1;
ans = mid;
}
else l = mid+1;
}
cout<<a[ans].v<<endl; } int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int tt;
tt = 1;
// cin>>tt;
while(tt--) solve(); return 0;
}

最新文章

  1. Groovy入门经典 随书重点
  2. 基于微软平台IIS/ASP.NET开发的大型网站有哪些呢?
  3. 自定义评分器Similarity,提高搜索体验(转)
  4. Oracle优化-表设计
  5. java_ant详解
  6. AngularJs-ui modal 传参数
  7. python challenge第1关--NoteBook上的“乱码”
  8. Ubutn14.04下caffeine工具不显示在工具栏中的问题
  9. MyKTV项目,走起!
  10. 当执行游戏0xc000007b错误的解决方法
  11. iOS多线程--深度解析
  12. 对于String 与StringBuffer 和StringBuilder的总结
  13. C#中Key事件
  14. caffe编译时候出现 undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0&#39;
  15. 【C++ Primer | 10】STL算法
  16. 安装tensorflow-gpu
  17. day25 python学习 继承,钻石继承
  18. python Django html 一对多数据实例 模态对话框添加数据
  19. 优化Hibernate所鼓励的7大措施:
  20. 安装lsb_release

热门文章

  1. Java SE 17 新增特性
  2. cad开发动态块对应的界面
  3. 【NOI P模拟赛】混凝土粉末(整体二分)
  4. Linux的OpenLava配置
  5. Linux网桥配置(用于大数据虚拟化)
  6. 第九章 kubectl命令行工具使用详解
  7. Kingbase V8R6存储过程变量数据导出到操作系统文件
  8. KingbaseES 的闪回查询
  9. 1.关于433MHz按键单片机解码
  10. 关于mciSendString函数调用mp3音频的问题