题目

贪心+堆。

一般贪心题用到堆的时候都会存在一种反悔操作,因此这个题也不例外。

首先电缆一定是连接两个相邻的点的,这很好证明,其次一个点只能被一条电缆连接,所以我们通过选这个电缆,不选相邻电缆和选相邻电缆,不选这个电缆之间选择,然后添加反悔操作。

链表的存在是为了方便删除线段。用l,r分别表示该电缆链接之后左右两边第一个还可以反悔的电缆

#include <bits/stdc++.h>
#include <queue>
#define N 1001001
#define int long long
using namespace std;
int n, k;
struct da {
int dat, pos;
}data[1001001];
bool operator < (da a, da b) {
return a.dat > b.dat;
}
priority_queue <da> q; //小根堆
int l[N], r[N], a[N], d[N], vis[N], ans;
signed main()
{
scanf("%lld%lld", &n, &k);
int now, last;
scanf("%lld", &last);//把n个点里面的n-1条线段拆分成n-1个点。
for (int i = 1; i < n; i++)
{
scanf("%lld", &now);
data[i].pos = i;
data[i].dat = now - last;
last = now;
q.push(data[i]);
}
data[0].dat = data[n].dat = 2147483647;//因为要取最小值,所以初始赋为极大值。
for (int i = 1; i < n; i++)
l[i] = i - 1, r[i] = i + 1;//初始化链表
for (int i = 1; i <= k; i++)//取k个线段,其实就是取k个点
{
while (vis[q.top().pos])
{
q.pop();
}
da now = q.top();
q.pop();
ans += now.dat;
vis[l[now.pos]] = vis[r[now.pos]] = 1;
da nex;
nex.pos = now.pos;
nex.dat = data[now.pos].dat = data[l[now.pos]].dat + data[r[now.pos]].dat - data[now.pos].dat;//选这个点意味着还有一次反悔的操作.
l[now.pos] = l[l[now.pos]];
r[now.pos] = r[r[now.pos]];
r[l[now.pos]] = now.pos;
l[r[now.pos]] = now.pos;
q.push(nex);
}
printf("%lld", ans);
return 0;
}

洛谷P3620 [APIO/CTSC 2007] 数据备份的更多相关文章

  1. 洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心)

    洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/132 ...

  2. 洛谷 P3620 [APIO/CTSC 2007]数据备份 解题报告

    P3620 [APIO/CTSC 2007]数据备份 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同 ...

  3. 洛谷P3620 [APIO/CTSC 2007] 数据备份 [堆,贪心,差分]

    题目传送门 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽 ...

  4. 洛谷$P3620\ [APIO/CTSC 2007]$数据备份 贪心

    正解:贪心 解题报告: 传送门$QwQ$ $umm$感觉这种问题还蛮经典的,,,就选了某个就不能选另一个这样儿,就可以用堆模拟反悔操作 举个$eg$,如果提出了$a_i$,那就$a_{i-1}$和$a ...

  5. P3620 [APIO/CTSC 2007]数据备份

    P3620 [APIO/CTSC 2007]数据备份 题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同 ...

  6. P3620 [APIO/CTSC 2007]数据备份[优先队列+贪心]

    题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏 ...

  7. luogu P3620 [APIO/CTSC 2007]数据备份

    luogu 首先如果一条线不是了连接的相邻两个位置一定不优,把它拆成若干连接相邻位置的线.所以现在问题是有\(n\)个物品,选\(k\)个,要求选的位置不能相邻,求最小总和 如果没有选的位置不能相邻这 ...

  8. 题解:[APIO/CTSC 2007]数据备份

    你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的乐趣.已 ...

  9. [luogu3620][APIO/CTSC 2007]数据备份【贪心+堆+链表】

    题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏 ...

随机推荐

  1. java之基本技术点总结博客

    泛型的理解 聊一聊-JAVA 泛型中的通配符 T,E,K,V,? 类,接口的继承和实现的规则 类与类之间只能继承,并且是单继承,可以多级继承 类与接口之间可以实现,一个类可以实现多个接口 接口和接口之 ...

  2. Java实现树的遍历以及打印(递归,非递归)

    import java.util.LinkedList; import java.util.Stack; public class BinarySearchTree1<E extends Com ...

  3. Kafka 生产者、消费者与分区的关系

    背景 最近和海康整数据对接, 需要将海康产生的结构化数据拿过来做二次识别. 基本的流程: 海康大数据 --> kafka server --> 平台 Kafka 的 topic 正常过车 ...

  4. 解除Ubuntu系统的root登录图形界面限制

    Ubuntu18.04.1开发团队为了Ubuntu18.04.1系统的安全,默认root不能登录图形界面,普通用户需要使用root权限时,只能通过sudo [命令] [参数] 临时使用root权限,或 ...

  5. Java 初始化块

    初始化块是和成员变量.成员函数一个级别的.一般用于类的初始化,也可执行其他java代码,作用和构造函数相同. 创建对象时,初始化块在构造函数之前执行. 初始化块分为普通初始化块.静态初始化块. 普通初 ...

  6. unity 用LineRender画四边形并测面积

    作为一个菜鸡,这个高中数学题差不多废了我两个上午...好了,废话不多说,直接上代码... using System.Collections.Generic; using UnityEngine; pu ...

  7. css浮动float详解

    https://www.cnblogs.com/iyangyuan/archive/2013/03/27/2983813.html

  8. TensorFlow 2 快速教程,初学者入门必备

    TensorFlow 2 简介 TensorFlow 是由谷歌在 2015 年 11 月发布的深度学习开源工具,我们可以用它来快速构建深度神经网络,并训练深度学习模型.运用 TensorFlow 及其 ...

  9. BUUCTF复现记录1

    平台地址:https://buuoj.cn/  里面很多之前的题目,不错的平台.另外幕后大哥博客https://www.zhaoj.in/     以下的解题,都是参考各位大佬的WP去复现,重在记录下 ...

  10. Selenium+TestNG+CSV数据驱动

    1.工程的目录结构: # saas SAAS_UI自动化测试工程 # 一.工程的目录结构 1.saas/src是工程的入口 a.saas/src/main/java/com/saas/encapsul ...