【CF125E】MST Company(凸优化,最小生成树)
【CF125E】MST Company(凸优化,最小生成树)
题面
题解
第一眼看见就给人丽洁姐那道\(tree\)一样的感觉。
那么二分一个权值,加给所有有一个端点是\(1\)的边,
然后跑最小生成树\(check\)一下就好了。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
#define ll long long
#define MAX 5050
#define MAXL 100100
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
struct edge{int u,v,w,id;}e[MAXL];
bool operator<(edge a,edge b)
{
if(a.w!=b.w)return a.w<b.w;
return a.u>b.u;
}
int f[MAX],n,m,K,tot;
int getf(int x){return x==f[x]?x:f[x]=getf(f[x]);}
vector<int> g;
int Kruskal(int mid)
{
for(int i=1;i<=m;++i)if(e[i].u==1)e[i].w+=mid;
for(int i=1;i<=n;++i)f[i]=i;
int cnt=0;g.clear();sort(&e[1],&e[m+1]);
for(int i=1;i<=m;++i)
{
int u=getf(e[i].u),v=getf(e[i].v);
if(u==v)continue;
f[u]=v;g.push_back(e[i].id);
if(e[i].u==1)++cnt;
}
for(int i=1;i<=m;++i)if(e[i].u==1)e[i].w-=mid;
return cnt;
}
void Calc(int mid)
{
for(int i=1;i<=m;++i)if(e[i].u==1)e[i].w+=mid;
for(int i=1;i<=n;++i)f[i]=i;
int cnt=0,tot=0;g.clear();sort(&e[1],&e[m+1]);
for(int i=1;i<=m;++i)
{
int u=getf(e[i].u),v=getf(e[i].v);
if(u==v)continue;
if(e[i].u==1&&cnt==K)continue;
f[u]=v;g.push_back(e[i].id);
if(e[i].u==1)++cnt;++tot;
}
if(cnt<K||tot!=n-1){puts("-1");exit(0);}
}
int main()
{
n=read();m=read();K=read();
for(int i=1;i<=m;++i)
{
int u=read(),v=read(),w=read();
if(u>v)swap(u,v);if(u==1)++tot;
e[i]=(edge){u,v,w,i};
}
int l=-100000,r=100000,ret=-1e9;
while(l<=r)
{
int mid=(l+r)>>1;
int d=Kruskal(mid);
if(d<K)r=mid-1;
else l=mid+1,ret=mid;
}
if(ret<-1e5){puts("-1");return 0;}
Calc(r);printf("%d\n",n-1);
for(int i=0;i<n-1;++i)printf("%d ",g[i]);
return 0;
}
【CF125E】MST Company(凸优化,最小生成树)的更多相关文章
- luogu CF125E MST Company wqs二分 构造
LINK:CF125E MST Company 难点在于构造 前面说到了求最小值 可以二分出斜率k然后进行\(Kruskal\) 然后可以得到最小值.\(mx\)为值域. 得到最小值之后还有一个构造问 ...
- CF125E MST company (凸优化+MST)
qwq自闭的一个题 我来修锅辣!!!!!! 这篇题解!可以\(hack\)全网大部分的做法!!! 首先,我们可以把原图中的边,分成两类,一类是与\(1\)相连,另一类是不与\(1\)相连. 原题就转化 ...
- CF-125E MST Company (单度限制最小生成树)
参考红宝书 题目链接 对除 1 号点顶点外的点集,求一次最小生成森林,对于最小生成森林的联通分量,选择最短的一条边与 1 号点相连.设此时 1 号点的度为 \(k_0\),如果 \(k_0\lt L\ ...
- [CF125E]MST Company
codeforces description 给出一张\(n\)点\(m\)条边的无向图,求一棵满足\(1\)号点度数恰好为\(k\)的最小生成树,并输出方案. \(1\le k\le n\le500 ...
- 洛谷2619/bzoj2654 Tree(凸优化+MST)
bzoj的数据是真的水.. qwq 由于本人还有很多东西不是很理解 qwq 所以这里只写一个正确的做法. 首先,我们会发现,对于你选择白色边的数目,随着数目的上涨,斜率是单调升高的. 那么这时候我们就 ...
- 【BZOJ2654】Tree(凸优化,最小生成树)
[BZOJ2654]Tree(凸优化,最小生成树) 题面 BZOJ 洛谷 题解 这道题目是之前\(Apio\)的时候写的,忽然发现自己忘记发博客了... 这个万一就是一个凸优化, 给所有白边二分一个额 ...
- CodeForces 125E MST Company
E. MST Company time limit per test 8 seconds memory limit per test 256 megabytes input standard inpu ...
- 机器学习&数据挖掘笔记_15(关于凸优化的一些简单概念)
没有系统学过数学优化,但是机器学习中又常用到这些工具和技巧,机器学习中最常见的优化当属凸优化了,这些可以参考Ng的教学资料:http://cs229.stanford.edu/section/cs22 ...
- paper 110:凸优化和非凸优化
数学中最优化问题的一般表述是求取,使,其中是n维向量,是的可行域,是上的实值函数.凸优化问题是指是闭合的凸集且是上的凸函数的最优化问题,这两个条件任一不满足则该问题即为非凸的最优化问题. 其中,是 凸 ...
随机推荐
- Unity优化方向——优化Unity游戏中的图形渲染(译)
CPU bound:CPU性能边界,是指CPU计算时一直处于占用率很高的情况. GPU bound:GPU性能边界,同样的是指GPU计算时一直处于占用率很高的情况. 原文:https://unity3 ...
- day12生成器
迭代器 __iter__() 获取迭代器 __next__() 下一个 生成器 本质就是迭代器 两种方式写生成器 1. 生成器函数 2. 生成器表达式 生成器函数 函数内部有yield. yield返 ...
- linux安装配置JDK脚本
#!/bin/bash # install jdk and configuring environment variables function installjdk(){ tar -zxf jdk- ...
- Erlang数据类型的表示和实现(1)——数据类型回顾
本文介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现.了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数 ...
- RN 离线包集成后需要注意的一些问题
1.ReactNative 开发中如何去掉iOS状态栏的"Loading from..." 等淡黑色的弹框,很难看? 在 AppDelegate.h 中引入: #import &l ...
- 2017秋软工 - 本周PSP
1. PSP 2. PSP饼状图 3. 进度条 4. 累计进度图
- [2019BUAA软工]第0次代码作业
Visual Studio 单元测试的简单应用 写在前面 笔者根据作业的介绍以及Visual Studio 2017 文档的相关说明,进行了Visual Studio 单元测试的简单应用. Tip ...
- 读书笔记之java编程思想2
今天将第一章余下的部分读完了,余下部分讲解了java单继承的特点,单继承保证了所有的子类都有一个基类,这使得java所实现的垃圾回收器的实现变得简单了很多,单继承保证了所有的对象都具有一些功能,使得参 ...
- 关于echart柱形图的使用问题
关于一个数据对应两个值的问题 series: [{ name: '数量(个)', type: 'bar', barWidth: '30%', barGap: , //两个数据条没有间距 data: y ...
- SpringMVC(一)-- springmvc的系统学习之配置方式
资源:尚学堂 邹波 springmvc框架视频 一.springMVC 工作流程 页面请求---->控制器(Controller DispatcherServlet)----& ...