【BZOJ2654】Tree(凸优化,最小生成树)
【BZOJ2654】Tree(凸优化,最小生成树)
题面
题解
这道题目是之前\(Apio\)的时候写的,忽然发现自己忘记发博客了。。。
这个万一就是一个凸优化,
给所有白边二分一个额外权值,并且给边权加上这个权值。
然后跑最小生成树,将限制问题转换为判定问题即可。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MAX 111111
inline int read()
{
    RG int x=0,t=1;RG char ch=getchar();
    while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
    if(ch=='-')t=-1,ch=getchar();
    while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
    return x*t;
}
int n,m,K;
struct Link{int u,v,w,col;}e[MAX];
bool cmp(Link a,Link b){if(a.w!=b.w)return a.w<b.w;else return a.col<b.col;}
int f[MAX];
int getf(int x){return x==f[x]?x:f[x]=getf(f[x]);}
int check(int mid,int opt)
{
    for(int i=1;i<=m;++i)
        if(!e[i].col)e[i].w-=mid;
    sort(&e[1],&e[m+1],cmp);
    for(int i=0;i<n;++i)f[i]=i;
    int cnt=0,tot=0,sum=0;
    for(int i=1;i<=m;++i)
    {
        int u=e[i].u,v=e[i].v;
        if(getf(u)==getf(v))continue;
        f[getf(u)]=getf(v);
        ++tot;sum+=e[i].w;
        if(!e[i].col)++cnt;
        //if(tot==n-1)break;
    }
    for(int i=1;i<=m;++i)
        if(!e[i].col)e[i].w+=mid;
    if(!opt)return cnt;
    else return sum;
}
int main()
{
    n=read();m=read();K=read();
    for(int i=1;i<=m;++i)
        e[i].u=read(),e[i].v=read(),e[i].w=read(),e[i].col=read();
    int l=-101,r=101,ans=1e9;
    while(l<=r)
    {
        int mid=(l+r)>>1;
        int d=check(mid,0);
        if(d>=K)r=mid-1,ans=mid;
        else l=mid+1;
    }
    printf("%d\n",check(ans,1)+K*ans);
    return 0;
}
												
											【BZOJ2654】Tree(凸优化,最小生成树)的更多相关文章
- BZOJ2654: tree  二分答案+最小生成树
		
Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...
 - BZOJ2654 tree  【二分 + 最小生成树】
		
题目 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. 输入格式 第一行V,E,need分别表示点数,边数和需要的白色边数. 接下来E行, ...
 - 洛谷2619/bzoj2654 Tree(凸优化+MST)
		
bzoj的数据是真的水.. qwq 由于本人还有很多东西不是很理解 qwq 所以这里只写一个正确的做法. 首先,我们会发现,对于你选择白色边的数目,随着数目的上涨,斜率是单调升高的. 那么这时候我们就 ...
 - 【CF125E】MST Company(凸优化,最小生成树)
		
[CF125E]MST Company(凸优化,最小生成树) 题面 洛谷 CF 题解 第一眼看见就给人丽洁姐那道\(tree\)一样的感觉. 那么二分一个权值,加给所有有一个端点是\(1\)的边, 然 ...
 - CF125E MST company (凸优化+MST)
		
qwq自闭的一个题 我来修锅辣!!!!!! 这篇题解!可以\(hack\)全网大部分的做法!!! 首先,我们可以把原图中的边,分成两类,一类是与\(1\)相连,另一类是不与\(1\)相连. 原题就转化 ...
 - 2021.07.19 BZOJ2654 tree(生成树)
		
2021.07.19 BZOJ2654 tree(生成树) tree - 黑暗爆炸 2654 - Virtual Judge (vjudge.net) 重点: 1.生成树的本质 2.二分 题意: 有一 ...
 - 机器学习&数据挖掘笔记_15(关于凸优化的一些简单概念)
		
没有系统学过数学优化,但是机器学习中又常用到这些工具和技巧,机器学习中最常见的优化当属凸优化了,这些可以参考Ng的教学资料:http://cs229.stanford.edu/section/cs22 ...
 - paper 110:凸优化和非凸优化
		
数学中最优化问题的一般表述是求取,使,其中是n维向量,是的可行域,是上的实值函数.凸优化问题是指是闭合的凸集且是上的凸函数的最优化问题,这两个条件任一不满足则该问题即为非凸的最优化问题. 其中,是 凸 ...
 - 凸优化简介 Convex Optimization Overview
		
最近的看的一些内容好多涉及到凸优化,没时间系统看了,简单的了解一下,凸优化的两个基本元素分别是凸函数与凸包 凸集 凸集定义如下: 也就是说在凸集内任取两点,其连线上的所有点仍在凸集之内. 凸函数 凸函 ...
 
随机推荐
- 【转】Linux - CentOS 7网络配置
			
Linux - CentOS 7网络配置 https://blog.csdn.net/J080624/article/details/78083988 安装完VM后,需要进行网络配置.第一个目标为 ...
 - 【Unity Shader】(七) ------ 复杂的光照(下)
			
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Sha ...
 - Python 之Memcache中间件
			
一.引子 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载,它通过在内存中缓存数据和减少读取数据库的次数,从而提高动态数据库驱动网站的速度.Memcache ...
 - lua中table的常用方法
			
转载:https://blog.csdn.net/Fenglele_Fans/article/details/83627021 1:table.sort() language = {"lua ...
 - Python中remove,pop,del的区别
			
先上题:写出最终打印的结果 a = [1, 2, 3, 4] for x in a: a.remove(x) print(a) print("=" * 20) b = [1, 2, ...
 - Hyperledger Fabric Ledger——账本总账
			
Ledger Ledger(账本)即所有的state transitions(状态切换),是有序且不可篡改的.state transitions(状态切换)是由参与方提交的chaincode(智能合约 ...
 - NIO基本概念
			
1. IO和NIO的区别 IO 面向流(stream oriented) 阻塞(blocking io) 无 NIO 面向缓冲区(buffer orie ...
 - DebuggerVisualizer时,序列化引出的问题。
			
实现如下功能:http://www.cnblogs.com/devil0153/archive/2010/09/01/Visual-Studio-Custom-Debugger.html#288924 ...
 - 前端_JQuery
			
使用参考:http://jquery.cuishifeng.cn/ 目录 jQuery是什么 jQuery对象 寻找元素(选择器和筛选器) 选择器 表单属性选择器 筛选器 操作元素(属性.css.文档 ...
 - sprint2 (第八天)
			
今天课多,没做什么功能.这个sprint定的目标比较高,要实现的功能较多,可能完成不了目标值.因为GitHub下载和上传很慢,经常失败,所以这几天都没有更新GitHub,功能明天早点实现然后上传到Gi ...