图的分割


题目大意:

给你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;
}

I-图的分割(二分+并查集)的更多相关文章

  1. HDU 3081 Marriage Match II (网络流,最大流,二分,并查集)

    HDU 3081 Marriage Match II (网络流,最大流,二分,并查集) Description Presumably, you all have known the question ...

  2. 洛谷P2498 [SDOI2012]拯救小云公主 【二分 + 并查集】

    题目 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等级1 ...

  3. 洛谷:P1783 海滩防御(二分+并查集 最短路 最小生成树)

    题意: 给定长度为N的海滩,然后有M做防御塔,给出每座塔的位置Xi,到海岸的距离Yi. 求防御塔上最小观测半径Ri,使得海滩被封锁. 思路:要使左边界和右边界连通. 很nice,可以二分+并查集做. ...

  4. POJ2349二分+并查集,类似最小树的贪心

    题意:       给你n个点,你的任务是构建一颗通讯树,然后给你一个s表示可以选出来s个点两两通讯不花钱,就是费用是0,其他的费用就是两点的距离,有个要求就是其他的费用中最大的那个最小. 思路:   ...

  5. hdu3081 Marriage Match II(二分+并查集+最大流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3081 题意: n个女生与n个男生配对,每个女生只能配对某些男生,有些女生相互是朋友,每个女生也可以跟她 ...

  6. 2018.11.02 NOIP模拟 飞越行星带(最小生成树/二分+并查集)

    传送门 发现题目要求的就是从下到上的瓶颈路. 画个图出来发现跟去年noipnoipnoip提高组的奶酪差不多. 于是可以二分宽度+并查集检验,或者直接求瓶颈. 代码

  7. hdu 3081(二分+并查集+最大流||二分图匹配)

    Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  8. 【BZOJ 1594】 [Usaco2008 Jan]猜数游戏 (二分+并查集)

    1594: [Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面 ...

  9. bzoj 1196: [HNOI2006]公路修建问题 二分+并查集

    题目链接 1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1576  Solved: 909[Submit ...

随机推荐

  1. 几款优秀的点播、RTSP/RTMP直播播放器介绍

    1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Andr ...

  2. SpringBoot使用自定义注解+AOP+Redis实现接口限流

    为什么要限流 系统在设计的时候,我们会有一个系统的预估容量,长时间超过系统能承受的TPS/QPS阈值,系统有可能会被压垮,最终导致整个服务不可用.为了避免这种情况,我们就需要对接口请求进行限流. 所以 ...

  3. 基于 iframe 的微前端框架 —— 擎天

    vivo 互联网前端团队- Jiang Zuohan 一.背景 VAPD是一款专为团队协作办公场景设计的项目管理工具,实践敏捷开发与持续交付,以「项目」为核心,融合需求.任务.缺陷等应用,使用敏捷迭代 ...

  4. Windows Server体验之SSH远程连接

    经过之前的各种远程管理方法,Windows Server可以被很好的管理,也能符合大多数Windows管理员的使用习惯.不过既然是命令行版本的Windows能不能和Linux一样管理呢?Windows ...

  5. keycloak~资源的远程授权

    17.1远程资源授权准备 17.1.1认证和访问流程图 参考:http://www.zyiz.net/tech/detail-141309.html 17.1.2为用户指定角色 可以使用ROLE_US ...

  6. day03-2无异常退出

    多用户即时通讯系统03 4.编码实现02 4.3功能实现-无异常退出系统 4.3.1思路分析 上述代码运行时,在客户端选择退出系统的时候,可以发现程序并没有停止运行,原因是: 退出时,程序将循环标志l ...

  7. git-flow模型

    git-flow 是在 git branch 和 git tag 基础上封装出来的代码分支管理模型,把实际开发模拟称 master develop feature release hotfix sup ...

  8. python的注释、变量

    注释 注释是代码的解释型语言,不会影响代码执行,就是专门给程序员看的. 注释是很重要的代码组成部分! # 单行注释 ''' 多行注释 连续输入三个单引号 ''' """ ...

  9. 220722 T1 分树 (模拟)

    dfs一遍求出以每个节点为根的子树大小,然后枚举n的约数,对于每个约数i,统计sz[ ]是i的倍数的有多少个(开桶统计),如果有n/i个则答案+1. 这道题也就是个结论题,画图分析一下.复杂度O(n* ...

  10. Docker Private Registry

    Docker Private Registry 目录 Docker Private Registry Docker Registry Docker Private Registry 使用docker- ...