bzoj1150: [CTSC2007]数据备份Backup--贪心+优先队列维护堆
题目大意:将k对点两两相连,求最小长度
易证得,最优方案中,相连的办公楼一定是取相邻的比取不相邻的要更优
然后就可以用贪心来做这道题了。。
之前向CZL大神学习了用堆来贪心的做法orz
大概思路就是将初始所有的线段放进堆里
每次取最短的线段进行连接,且ans+=a[i]
取完后删除当前线段,与相邻的两条线段,同时再插入新边,权值为a[pre]+a[next]-a[now]
其作用与最大流中的反向弧有点像,下一次若取到这条边,即ans+=a[pre]+a[next]-a[now]
很明显a[now]与之前抵消了,即不取now,反而取相邻的两条边去了
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<queue> 5 using namespace std; 6 const int maxn = 200020*2; 7 struct node{ 8 int id; 9 }; 10 priority_queue<node> Q; 11 int pre[maxn],next[maxn],k,a[maxn],n; 12 bool del[maxn]; 13 int tot,last,now,ans; 14 15 bool operator<(node x, node y){ 16 return a[x.id]>a[y.id]; 17 } 18 19 int main(){ 20 scanf("%d%d", &n, &k); 21 scanf("%d", &last); 22 tot=0; 23 for (int i=1; i<n; i++){ 24 scanf("%d", &now); 25 a[++tot]=now-last; 26 last=now; 27 } 28 for (int i=1; i<n; i++){ 29 Q.push((node){i}); 30 pre[i]=i-1; next[i]=i+1; 31 } 32 pre[1]=next[tot]=0; 33 a[0]=1002000000; // Attention:不能是maxlongint,因为后面a[++tot]会爆 34 while (k--){ 35 while (!Q.empty() && del[Q.top().id]) Q.pop(); 36 if (Q.empty()) break; 37 int now=Q.top().id; ans+=a[now]; Q.pop(); 38 39 int l=pre[now],r=next[now]; 40 del[now]=del[l]=del[r]=1; 41 42 a[++tot]=a[l]+a[r]-a[now]; Q.push((node){tot}); 43 44 pre[tot]=pre[l]; next[tot]=next[r]; 45 if (pre[tot]) next[pre[tot]]=tot; 46 if (next[tot]) pre[next[tot]]=tot; 47 } 48 printf("%d\n", ans); 49 return 0; 50 }
转载于:https://www.cnblogs.com/mzl120918/p/5467132.html
bzoj1150: [CTSC2007]数据备份Backup--贪心+优先队列维护堆相关推荐
- BZOJ1150[CTSC2007]数据备份Backup——模拟费用流+堆+链表
题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游 ...
- bzoj1150 [CTSC2007]数据备份Backup
大概就是写了道生日礼物那个不知道叫啥的贪心..... 大概就是说这道题和那个比较像... 所以留着看看吧,哪天想起了回来做这道题咯~ 转载于:https://www.cnblogs.com/LLppd ...
- [BZOJ1150][CTSC2007]数据备份Backup
首先肯定要选择相邻的公司配对才会距离最小 先把两两之间的距离加入小根堆中 每次取出堆顶,加入答案,删掉左右线段,再扔进去len[l]+len[r]-len[now] 这样如果这个新点被取到,说明取两边 ...
- P3620-[APIO/CTSC2007]数据备份【贪心,堆,链表】
正题 题目链接:https://www.luogu.com.cn/problem/P3620 题目大意 一条线上有nnn个位置,选出kkk对使得它们的距离差之和最小. 解题思路 因为一定是连接相邻的最 ...
- [APIO / CTSC2007]数据备份 --- 贪心
[APIO / CTSC 2007]数据备份 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份. 然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公 ...
- [APIO/CTSC 2007]数据备份(贪心+堆)
你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的乐趣. ...
- 专题突破二之优先队列、st表——,Running Median,Sequence,Buy Low Sell High,数据备份,超级钢琴,ZQC的手办
文章目录 Running Median Sequence Buy Low Sell High [APIO/CTSC 2007] 数据备份 [NOI2010] 超级钢琴 「LibreOJ β Round ...
- Right Backup(云端数据备份软件)v8.1官方版
Right Backup是一款云端数据备份软件,Right Backup为您的数据提供一站式云存储解决方案,在云中备份您的所有文档.照片.音乐和其他重要的资料,在出现不幸的数据丢失时保持安全! 软件特 ...
- Android数据备份(Android Data Backup)
最近我在阅读Android Developer上的文章,本文是对其中一篇Data Backup的翻译.希望可以通过翻译英文技术文章提高自己阅读英文文档的水平,如果有不妥的地方,希望指出,谢谢~因为这个 ...
最新文章
- 自定义Linq的Distinct
- 跳槽时,这些Java面试题99%会被问到
- php开源 饭馆记账软件_GitHub - CNYoki/xxjzWeb: 小歆记账WebApp项目(Web服务端)
- 12月16日文章排行点评及编辑部训练
- python遍历文件对象_Python文件常见操作实例分析【读写、遍历】
- SAP Commerce Cloud 2011装好之后,访问Accelerator时遇到错误
- Perl split字符串分割函数用法指南
- 想要学好C++有哪些技巧?
- js识别用户设备是移动端手机时跳转到手机网站
- R语言_缺失值NA的处理
- java审批工作流,值得一读!
- 数据来源渠道及采集工具_几款简单好用的爬虫抓取数据采集工具
- 用树莓派搭建公网个人下载平台aria2-pro,推荐6个优质种子资源站
- 你是什么命,好玩的很
- java魔界战记魔女_魔界战记风格RPG《魔女传说》最新公开!
- thymeleaf中th:href携带参数的三种写法
- 如何考量私有云的解决方案
- 移动APP整体策划-004-App注册登录系统策划方案
- 电子时钟的设计与实现
- 金蝶云系统服务器,金蝶云平台
热门文章
- 在Linux下安装和使用MySQL(转)
- CVPR自动驾驶运动预测挑战赛:轻舟智航夺冠方案
- GridMask:SOTA 数据增广方法,显著改进分类、检测、分割效果
- DeepMindVGG提出基于集合的人脸识别算法GhostVLAD,精度远超IJB-B数据集state-of-the-art...
- 重磅!清华商汤开源CVPR2018超高精度人脸对齐算法LAB
- python批处理将图片进行放大实例代码
- 谷歌、DeepMind提出高效Transformer评估基准
- 线性二次型最优控制器LQR设计原理以及matlab实现
- mysql查询到最新记录就停止_使用Limit参数优化MySQL查询 在找到一个记录后将停止查询...
- 滴滴人脸识别申诉照片怎么拍_涅槃乐队Nevermind封面照片是怎么拍出来的?