[CF125E]MST Company
题意:求一种特殊的最小生成树。给定一个有你$n$个节点和$m$条边的图,找出一个生成树满足从根节点1直接连向其余节点的边要恰好是$k$条,在此条件下生成树的权值和最小。
二分一个数$x$,给每条与1相连的边加上这个权值,跑最小生成树判断与1相连的边大于还是小于$k$即可。
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define M 100010 6 using namespace std; 7 struct point{ 8 int u,v,co,dis,id;bool flag; 9 }e[M]; 10 int n,m,k,l,r,cnt; 11 int res[M],fa[M]; 12 bool cmp(point a1,point a2) {return a1.dis<a2.dis||(a1.dis==a2.dis&&a1.u<a2.u);} 13 int find(int x) {return fa[x]==x?x:fa[x]=find(fa[x]);} 14 int check(int mid) 15 { 16 int num=0; 17 for(int i=1;i<=m;i++) if(e[i].co) e[i].dis+=mid; 18 sort(e+1,e+1+m,cmp); 19 for(int i=1;i<=n;i++) fa[i]=i; 20 for(int i=1;i<=m;i++) 21 { 22 int u=e[i].u,v=e[i].v; 23 if(find(u)!=find(v)) 24 { 25 fa[find(v)]=find(u); 26 num+=(e[i].co==1); 27 } 28 } 29 for(int i=1;i<=m;i++) if(e[i].co) e[i].dis-=mid; 30 return num; 31 } 32 int main() 33 { 34 scanf("%d%d%d",&n,&m,&k); 35 for(int i=1;i<=m;i++) 36 { 37 scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].dis); 38 if(e[i].u>e[i].v) swap(e[i].u,e[i].v); 39 e[i].co=(e[i].u==1||e[i].v==1); 40 e[i].id=i; 41 } 42 l=-1e5,r=1e5;int minn=1e9; 43 while(l<=r) 44 { 45 int mid=(l+r)/2; 46 int num=check(mid); 47 if(num>=k) l=mid+1,minn=mid; 48 else r=mid-1; 49 } 50 if(minn==1e9) {puts("-1");return 0;} 51 else 52 { 53 for(int i=1;i<=m;i++) if(e[i].co==1) e[i].dis+=minn; 54 sort(e+1,e+1+m,cmp); 55 int tot=0,ans=0; 56 for(int i=1;i<=n;i++) fa[i]=i; 57 for(int i=1;i<=m;i++) 58 { 59 int u=e[i].u,v=e[i].v; 60 if(find(u)!=find(v)&&tot+(e[i].co==1)<=k) 61 { 62 fa[find(v)]=find(u); 63 tot+=(e[i].co==1); 64 ++ans; 65 e[i].flag=true; 66 } 67 } 68 if(ans<n-1||tot<k) {puts("-1");return 0;} 69 printf("%d\n",n-1); 70 for(int i=1;i<=m;i++) if(e[i].flag) printf("%d ",e[i].id); 71 } 72 return 0; 73 }
转载于:https://www.cnblogs.com/Slrslr/p/9703092.html
[CF125E]MST Company相关推荐
- CF125E MST company (凸优化+MST)
qwq自闭的一个题 我来修锅辣!!!!!! 这篇题解!可以\(hack\)全网大部分的做法!!! 首先,我们可以把原图中的边,分成两类,一类是与\(1\)相连,另一类是不与\(1\)相连. 原题就转化 ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- 洛谷2619/bzoj2654 Tree(凸优化+MST)
bzoj的数据是真的水.. qwq 由于本人还有很多东西不是很理解 qwq 所以这里只写一个正确的做法. 首先,我们会发现,对于你选择白色边的数目,随着数目的上涨,斜率是单调升高的. 那么这时候我们就 ...
- php修改时区MST,4、修改Cacti绘图的时间精度
一.前言 前面几篇记录了怎么去安装Cacti,这篇呢主要记录下如何修改Cacti绘图的精度,注意是绘图的精度而不是轮询的精度.在开始写这篇笔记的时候首先得谢谢帮助我解决PHP问题的ikodota. C ...
- 见到了“公司”定义一个Company类,那么见到了“字段”是不是也可定义一个Column类?...
既然见到了公司,我们可以定义一个Class Company ,那么我们见到了字段,是不是也可以定义一个Class ColumnInfo呢? 公司的描述信息类: 代码 public class Comp ...
- 博世力士乐液压_[Event Review] Company Visit Bosch Rexroth 博世力士乐液压工厂参观
Event Review Company Visit: Bosch Rexroth (Beijing) Hydraulic Co. Ltd. 博世力士乐(北京)液压有限公司 April 24, 2 ...
- SAP MM 执行事务代码MRRL报错-No message was found for partner 100065 company code 0001-
SAP MM 执行事务代码MRRL报错-No message was found for partner 100065 company code 0001- 1, 执行事务代码MRRL 触发invoi ...
- SAP MM 物料库存转固定资产,报错:You cannot post to asset in company code 1900 fiscal year 2021
SAP MM 物料库存转固定资产,报错:You cannot post to asset in company code 1900 fiscal year 2021 使用事务代码MIGO,移动类型24 ...
- SAP IDoc Post不成功,报错 - A company code cannot be determined for LI 0000100061 –
SAP IDoc Post不成功,报错 - A company code cannot be determined for LI 0000100061 – IDoc#4096出现如下报错:A comp ...
最新文章
- VC++ 使用导入位图创建工具栏
- 智能客户端(SmartClient)
- java cache详解,Java内存缓存详解
- nginx 电子书_Nginx最详细的反向代理配置步骤,拿去不谢
- abap数据类型转换_ABAP 中JSON格式的转换与解析
- 17 岁的程序员告诉你关于编程的 7 个重要教训!
- 两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set(utf-8)两种方法)
- Incorrect string value: '\xE8\x8B\x8F\xE6\x99\xA8...' for column 'user_name' at row 1
- 什么是波导的简并波,矩形波导和圆波导中的简并有何异同
- Spring boot 之搭建
- 使用linux批量引物设计,使用SSRMMD便捷、迅速与准确地进行:SSR位点检测,多态性SSR筛选,与批量SSR引物设计...
- 顺利通过2020年下工信部的系统架构设计师考试,在此感悟一下
- 南洋理工大学“网络安全高级研修班”寒假访学记
- Java最新面试题汇总
- 样本不均衡 Weighted cross entropy and Focal loss
- Android将APP做成一个launcher
- 如何保证同事的代码不会腐烂?一文带你了解 阿里巴巴 COLA 架构
- python PEP8问题及解决
- SALOME软件下载
- python爬取猫猫图