[CF125E]MST Company
description
给出一张\(n\)点\(m\)条边的无向图,求一棵满足\(1\)号点度数恰好为\(k\)的最小生成树,并输出方案。
\(1\le k\le n\le5000,m\le100000\)
sol
二分一个权值,给每条连接\(1\)号点的边的边权加上这个权值,跑最小生成树即可。
输出方案有点恶心,需要合理控制同边权的边的选取。
code
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int gi(){
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
const int N = 1e5+5;
struct edge{
int u,v,w,id;
bool operator < (const edge &b) const
{return w==b.w?u<b.u:w<b.w;}
}E[N];
int n,m,k,fa[N],vis[N],ans,tot;
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
int solve(int c){
for (int i=1;i<=m;++i) if (E[i].u==1) E[i].w+=c;
sort(E+1,E+m+1);tot=0;
for (int i=1;i<=n;++i) fa[i]=i;
for (int i=1;i<=m;++i)
if (find(E[i].u)!=find(E[i].v)){
fa[find(E[i].u)]=find(E[i].v);
tot+=E[i].u==1;
}
for (int i=1;i<=m;++i) if (E[i].u==1) E[i].w-=c;
return tot;
}
void getans(int c){
for (int i=1;i<=m;++i) if (E[i].u==1) E[i].w+=c;
sort(E+1,E+m+1);tot=ans=0;
for (int i=1;i<=n;++i) fa[i]=i;
for (int i=1;i<=m;++i)
if (find(E[i].u)!=find(E[i].v)&&tot+(E[i].u==1)<=k){
fa[find(E[i].u)]=find(E[i].v);
++ans;tot+=E[i].u==1;vis[i]=1;
}else vis[i]=0;
if (ans<n-1||tot<k) {puts("-1");return;}
printf("%d\n",n-1);
for (int i=1;i<=m;++i) if (vis[i]) printf("%d ",E[i].id);
puts("");
}
int main(){
n=gi();m=gi();k=gi();
for (int i=1;i<=m;++i){
int u=gi(),v=gi(),w=gi();
if (u>v) swap(u,v);
E[i]=(edge){u,v,w,i};
}
int L=-N,R=N,P=1e9;
while (L<=R){
int mid=L+R>>1;
if (solve(mid)>=k) P=mid,L=mid+1;else R=mid-1;
}
if (P==1e9) return puts("-1"),0;
getans(P);
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(凸优化,最小生成树)
[CF125E]MST Company(凸优化,最小生成树) 题面 洛谷 CF 题解 第一眼看见就给人丽洁姐那道\(tree\)一样的感觉. 那么二分一个权值,加给所有有一个端点是\(1\)的边, 然 ...
- CodeForces 125E MST Company
E. MST Company time limit per test 8 seconds memory limit per test 256 megabytes input standard inpu ...
- CODEFORCES 125E MST Company 巧用Kruskal算法
题意:给定一个带权边无向图,求最小生成树,且满足第一个节点的度为固定的k 无解则输出-1 数据规模: 节点数n和限制k<=5000 边数m<=10^5 时限8sec 思路: 首先时限比较宽 ...
- DP学习记录Ⅱ
DP学习记录Ⅰ 以下为 DP 的优化. 人脑优化DP P5664 Emiya 家今天的饭 正难则反.考虑计算不合法方案.一个方案不合法一定存在一个主食,使得该主食在多于一半的方法中出现. 枚举这个&q ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- codeforces 125 A-E 补题
A Measuring Lengths in Baden 进制转换 水题 #include<bits/stdc++.h> using namespace std; int main() { ...
随机推荐
- scss使用指南--每天一点
我们平时都称之为 Sass,其实可分成sass和scss, 其中Sass 是以严格的缩进式语法规则来书写,不带大括号({})和分号(;),以".sass"后缀为扩展名:而 SCSS ...
- InstallShield 2015 Premier的Basic MSI Project如何在卸载时删除残留的文件 (转)
转载:http://blog.csdn.net/zztoll/article/details/54018615#comments 先说下缘由,我在用InstallShield 2015 Premier ...
- HDU 4183 Pahom on Water(最大流)
https://vjudge.net/problem/HDU-4183 题意: 这道题目的英文实在是很难理解啊. 给出n个圆,每个圆有频率,x.y轴和半径r4个属性,每次将频率为400的圆作为起点,频 ...
- Vue.js系列之项目搭建(1)
项目搭建具体步骤如下: 1.安装node 到官网下载安装,我这里是win7系统. (中)https://nodejs.org/zh-cn/ (英)https://nodejs.org/en/ 2.安装 ...
- 数据模板--DataTemplate
DataTemplate 的 "DataType" 通常就是 “ViewModel” ——视图模型(亦可不恰当称之为:数据模型) <DataTemplate DataType ...
- CSS cursor 和 opacity 属性
cursor :一些不同的光标,当设置该属性之后,鼠标指上去会随着属性而改变. 举例: <span style="cursor:crosshair">十字线</s ...
- 51nod1289 stack
1289 大鱼吃小鱼 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动 ...
- C# Lock关键字
lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁. lock语句根本使用的就是Monitor.Enter和Monitor.Exit,也就是说lock(this) ...
- gradle ssh 插件
org.hidetake.ssh Gradle SSH Plugin is a Gradle plugin which provides remote command execution and fi ...
- EPANET头文件解读系列2——ENUMSTXT.H
在前一系统中介绍了text.h,回顾下,该文件包含了EPANET中所有字符串常量的定义,而ENUMSTXT.H文件则是以text.h中定义的字符串常量为基础,来对这些字符串常量进行合理的分组,形成字符 ...