题意:求一种特殊的最小生成树。给定一个有你$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相关推荐

  1. CF125E MST company (凸优化+MST)

    qwq自闭的一个题 我来修锅辣!!!!!! 这篇题解!可以\(hack\)全网大部分的做法!!! 首先,我们可以把原图中的边,分成两类,一类是与\(1\)相连,另一类是不与\(1\)相连. 原题就转化 ...

  2. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  3. 洛谷2619/bzoj2654 Tree(凸优化+MST)

    bzoj的数据是真的水.. qwq 由于本人还有很多东西不是很理解 qwq 所以这里只写一个正确的做法. 首先,我们会发现,对于你选择白色边的数目,随着数目的上涨,斜率是单调升高的. 那么这时候我们就 ...

  4. php修改时区MST,4、修改Cacti绘图的时间精度

    一.前言 前面几篇记录了怎么去安装Cacti,这篇呢主要记录下如何修改Cacti绘图的精度,注意是绘图的精度而不是轮询的精度.在开始写这篇笔记的时候首先得谢谢帮助我解决PHP问题的ikodota. C ...

  5. 见到了“公司”定义一个Company类,那么见到了“字段”是不是也可定义一个Column类?...

    既然见到了公司,我们可以定义一个Class Company ,那么我们见到了字段,是不是也可以定义一个Class ColumnInfo呢? 公司的描述信息类: 代码 public class Comp ...

  6. 博世力士乐液压_[Event Review] Company Visit Bosch Rexroth 博世力士乐液压工厂参观

    Event Review Company Visit:  Bosch Rexroth (Beijing) Hydraulic Co. Ltd.  博世力士乐(北京)液压有限公司 April 24, 2 ...

  7. 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 ...

  8. 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 ...

  9. 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 ...

最新文章

  1. VC++ 使用导入位图创建工具栏
  2. 智能客户端(SmartClient)
  3. java cache详解,Java内存缓存详解
  4. nginx 电子书_Nginx最详细的反向代理配置步骤,拿去不谢
  5. abap数据类型转换_ABAP 中JSON格式的转换与解析
  6. 17 岁的程序员告诉你关于编程的 7 个重要教训!
  7. 两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set(utf-8)两种方法)
  8. Incorrect string value: '\xE8\x8B\x8F\xE6\x99\xA8...' for column 'user_name' at row 1
  9. 什么是波导的简并波,矩形波导和圆波导中的简并有何异同
  10. Spring boot 之搭建
  11. 使用linux批量引物设计,使用SSRMMD便捷、迅速与准确地进行:SSR位点检测,多态性SSR筛选,与批量SSR引物设计...
  12. 顺利通过2020年下工信部的系统架构设计师考试,在此感悟一下
  13. 南洋理工大学“网络安全高级研修班”寒假访学记
  14. Java最新面试题汇总
  15. 样本不均衡 Weighted cross entropy and Focal loss
  16. Android将APP做成一个launcher
  17. 如何保证同事的代码不会腐烂?一文带你了解 阿里巴巴 COLA 架构
  18. python PEP8问题及解决
  19. SALOME软件下载
  20. python爬取猫猫图

热门文章

  1. 让Python不在mac的dock上显示火箭图标
  2. HotSpotOverview.pdf
  3. python 学习之 PythonAdvance2
  4. tomcat 部署站点时遇到的部分问题以及解决方案
  5. opensuse11.4-fcitx输入法安装
  6. Openwebmail在Ubuntu Linux上的安装过程
  7. 看麦田“蚂蚁网” 想网络新社区
  8. 关于子元素的margin-top对父级容器无效
  9. Linux的账号口令机制及其爆破
  10. ie关闭浏览器tab提示信息