[BZOJ2654] tree
2654: tree
Time Limit: 30 Sec Memory Limit: 512 MB
Submit: 610 Solved: 225
[Submit][Status][Discuss]
Description
给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。
题目保证有解。
Input
第一行V,E,need分别表示点数,边数和需要的白色边数。
接下来E行
每行s,t,c,col表示这边的端点(点从0开始标号),边权,颜色(0白色1黑色)。
Output
一行表示所求生成树的边权和。
Sample Input
0 1 1 1
0 1 2 0
Sample Output
HINT
数据规模和约定
0:V<=10
1,2,3:V<=15
0,..,19:V<=50000,E<=100000
所有数据边权为[1,100]中的正整数。
Source
只想说好巧妙地想法……
对于每条白边,我们每次给他加一个值x(x∈[-101,101],因为所有边权都在这个范围之内),易看出随着x的增大,白边在MST中的数量是渐渐减少的,我们求出每条白边+x时MST中白边的最大数量,因此求出第一个小于need的x,x-1就是我们需要的x,求出此时的MST,即要求的答案。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> #include<vector> #include<queue> using namespace std; struct node {int u,v,w,c; } e[100005]; int u[100005],v[100005],w[100005],c[100005],f[50005]; int n,m,need,ans,sum,cnt,l,r; int find(int x) { return x==f[x]?x:f[x]=find(f[x]); } bool cmp(node a,node b) {return ((a.w<b.w)||((a.w==b.w)&&(a.c<b.c))); } bool pd(int x) {ans=0;cnt=0;for (int i=1;i<=n;i++) f[i]=i;for (int i=1;i<=m;i++){e[i].u=u[i],e[i].v=v[i],e[i].w=w[i];e[i].c=c[i];if(!c[i])e[i].w+=x;}sort(e+1,e+m+1,cmp);for (int i=1;i<=m;i++){int p=find(e[i].u),q=find(e[i].v);if (p!=q){f[p]=q;ans+=e[i].w;if (e[i].c==0) cnt++;}}return cnt>=need; } int main() {scanf("%d%d%d",&n,&m,&need);for (int i=1;i<=m;i++){scanf("%d%d%d%d",&u[i],&v[i],&w[i],&c[i]);u[i]++; v[i]++;}l=-101; r=101;while (l<=r){int mid=(l+r)/2;if (pd(mid)){l=mid+1;sum=ans-need*mid;}else r=mid-1;}printf("%d",sum); }
转载于:https://www.cnblogs.com/ws-fqk/p/4660841.html
[BZOJ2654] tree相关推荐
- WQS二分 学习笔记 + 例题([BZOJ2654]Tree、[联考2018]林克卡特树)
目录 问题类型 WQS二分思路 形象地说 板题 题意 & 解法 CODE 省选题 题意 & 解法 CODE 问题类型 形如"恰好取 k 个--时的最优答案(并非具体方案)&q ...
- BZOJ2654: tree 二分答案+最小生成树
Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...
- BZOJ2654 Tree
Time Limit: 30 Sec Memory Limit: 512 MB Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有\(need\)条白色边的生 ...
- BZOJ2654: tree(陈立杰)
2654: tree(陈立杰) Time Limit: 30 Sec Memory Limit: 512 MB Submit: 229 Solved: 91 [Submit][Status] De ...
- 洛谷2619/bzoj2654 Tree(凸优化+MST)
bzoj的数据是真的水.. qwq 由于本人还有很多东西不是很理解 qwq 所以这里只写一个正确的做法. 首先,我们会发现,对于你选择白色边的数目,随着数目的上涨,斜率是单调升高的. 那么这时候我们就 ...
- BZOJ2654:tree(最小生成树,二分)
Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...
- [XSY]Tree Ext(矩阵树定理,拉格朗日插值,最小生成树,二分)
Tree Ext 这道题相当于把3道题合了起来. 要求修复的边中恰好有 k 条白边: 五颜六色的幻想乡(附拉格朗日插值法求多项式系数 ) + bzoj2654 tree(WQS二分 新科技get) 是 ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- 「BZOJ2654」tree
「BZOJ2654」tree 最小生成树+二分答案. 最开始并没有觉得可以二分答案,因为答案并不单调啊. 其实根据题意,白边的数目肯定大于need条,而最小生成树的白边数并不等于need(废话),可以 ...
最新文章
- 数据结构实验之链表五:单链表的拆分-sdut
- 使用nginx+tomcat实现动静分离
- Windows编程—BroadcastSystemMessage函数详解
- toad for mysql调试存储过程_【oracle】oracle 调试 存储过程
- 【vue】---动态路由传值
- 1041: 谭浩强C语言(第三版)习题5.5
- fckeditor java 使用方法_FCKeditor使用说明
- IDEA的依赖包报红问题
- .jpg .png .jpeg图片转.eps矢量图的python脚本
- 梦想,因坚持而绽放——答大学生的兴趣与行动
- 玩游戏也能赚钱?新手大学生做游戏短视频,一个内容收益200多
- keras 中的verbose详解
- 【软考】2020下半年软件设计师 易错知识点(1)
- 歪写数学史(当之无愧的数学王子)
- 配置zsh的prompt
- 【Java】简述断言(assert)的使用以及使用场景
- Spring Boot Admin在线查看spring boot后台日志
- 2018年统计用区划代码和城乡划分代码(截止2018年10月31日)(数据及python爬虫代码)
- 解决远古VOD使用域名访问时出现“文件服务器未找到”的错误
- 固态硬盘分为哪几种_固态硬盘接口种类有几种,看看自己的是第几种
热门文章
- 线程间通讯机制(基础篇)——Handler、Runnable、HandlerThread、AsyncTask的使用
- JZOJ 5435. 【NOIP2017提高A组集训10.30】Graph
- linux dns语法检测工具,DNS解析检查工具之nslookup
- 本体开发方法——the Method of Ontology Development
- 2022.2.22显示器连接器引脚信号定义2
- TensorFlow:简单的卷积层、池化层(采样层)示例
- java注解@remote,Dwr3.0纯注解(纯Java Code配置)配置与应用浅析二之前端调用后端
- poj3253 优先队列
- ECharts公共组件:title详解、 tooltip详解、toolbox详解、legend详解、dataZoom详解、visualMap全解...
- 玩玩自动化测试之selenium篇