博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷.2619.[国家集训队2]Tree I(带权二分 Kruskal)
阅读量:5039 次
发布时间:2019-06-12

本文共 930 字,大约阅读时间需要 3 分钟。

\(Description\)

给定一个无向带权连通图,每条边是黑色或白色。求一棵最小权的恰好有K条白边的生成树。

\(Solution\)

Kruskal是选取最小的n-1条边。而白边数有限制,考虑为其设额外边权C。

随着C增大,选的白边数应是不增的。可以二分求一个C值使得此时恰好选择K条边。选取时应优先选白边,因为多了还可以用黑边替换,少了只能减少C。
可能的问题是,C=mid时白边数>K,C=mid+1时白边数<K,因为有很多黑边与+mid后的白边权值想等。可以用这些黑边替换掉多余的白边,所以答案应是减K*mid(保留黑边)。

//404ms 3.36MB#include 
#include
#include
//#define gc() getchar()#define MAXIN 100000#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)const int N=5e4+5,M=1e5+5;int n,m,K,fa[N],Ans;char IN[MAXIN],*SS=IN,*TT=IN;int read();struct Edge{ int fr,to,val,col; inline void Init(){ fr=read()+1, to=read()+1, val=read(), col=read(); } bool operator <(const Edge &x)const{ return val==x.val?col
>1)) l=mid+1; else r=mid-1;// Check(l); printf("%d",Ans); return 0;}

转载于:https://www.cnblogs.com/SovietPower/p/9162351.html

你可能感兴趣的文章
分享Java web 开发必游之路
查看>>
IIS初始化(预加载),解决第一次访问慢,程序池被回收问题(转载)
查看>>
Bean的Scope
查看>>
【BZOJ】3142: [Hnoi2013]数列
查看>>
http初探
查看>>
elasticsearch的安装
查看>>
__next__()
查看>>
爬取:中国大学排名
查看>>
聊天室(C++客户端+Pyhton服务器)_1.框架搭设
查看>>
UpdatePanel 内控件 更新“外的”控件【转】
查看>>
mybatis中&gt;=和&lt;=的实现方式
查看>>
Python面向对象03/继承
查看>>
java序列化和反序列化
查看>>
绝对定位
查看>>
flink源码编译(windows环境)
查看>>
dpkg 删除 百度网盘 程序
查看>>
服务器nginx安装
查看>>
std::nothrow
查看>>
rest-framework 分页器
查看>>
JQuery(一)安装&选择器 样式篇
查看>>