Luogu P1315 观光公交
# 解题思路
一开始自己想了一个贪心,虽然贪心的主要思路是对的,但并不会统计游客用的旅行时间。所以就去题解里面看看,第一篇是最小费用最大流,会比较麻烦,所以就去看了看底下的贪心,第一篇贪心被卡掉了,看第二篇,嗯,好像还行。再看看第三篇,写的好简略。不过看懂了。
贪心的主要思路就是在经过游客最多的路上使用加速器,但是还要注意,如果在一条路径的终点,有的游客到达的时间比现在公交车到达的时间还要晚的话就没必要用加速器了,因为再早到达你也必须等着游客上车吧。
考虑用优先队列保证得到最大的价值(经过的游客的数量),如果有一个点满足下面的条件:
最晚到达的乘客的到达时间比公交车的到达时间还要晚。
那就将整段路程从这里分开,分别去考虑劈开后的路程。
昨晚上面这些再来考虑如何处理每段路程。找一下这段路程中,每两个点之间的路途上,最短的等待时间,这就是要使用(用作用)的加速器数量的最大值。(因为超过了这个值就不会再有影响了)
# 代码
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
inline int read() {
int x = , f = ; char c = getchar();
while (c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while (c <= '' && c >= '') {x = x* + c-''; c = getchar();}
return x * f;
}
const int maxn = ;
struct node {
int l, r, tim, val;
}tmp;
int n, m, k, v[maxn], a[maxn], b[maxn], d[maxn], ans;
bool operator < (const node &a, const node &b) {
return a.val < b.val;
}
priority_queue<node> Q;
inline void sol(int l, int r) {
if(l >= r) return ;
if(d[l] == ) {sol(l+, r); return ;}
for(int i=l+; i<r; i++)
if(a[i] >= b[i]) {
sol(l, i), sol(i, r);
return ;
}
int mn = d[l], val = v[r];
for(int i=l+; i<r; i++) {
mn = min(mn, b[i]-a[i]);
val += v[i];
}
d[l] -= mn;
for(int i=l+; i<r; i++) b[i] -= mn;
Q.push((node){l, r, mn, val});
}
int main() {
n = read(), m = read(), k = read();
for(int i=; i<n; i++) d[i] = read();
int x, y, z;
for(int i=; i<=m; i++) {
z = read(), x = read(), y = read();
a[x] = max(a[x], z);
ans -= z;
v[y] ++;
}
for(int i=; i<=n; i++) b[i] = max(b[i-], a[i-]) + d[i-];
for(int i=; i<=n; i++) ans += b[i] * v[i];
for(sol(, n); !Q.empty()&&k!=; ) {
tmp = Q.top(), Q.pop();
ans -= min(tmp.tim, k) * tmp.val;
k -= min(tmp.tim, k);
if(k != ) sol(tmp.l, tmp.r);
}
printf("%d", ans);
}
Luogu P1315 观光公交的更多相关文章
- [luogu]P1315 观光公交[贪心]
[luogu]P1315 [NOIP2011]观光公交 ——!x^n+y^n=z^n 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车, ...
- 洛谷 P1315 观光公交 —— 贪心
题目:https://www.luogu.org/problemnew/show/P1315 问题是想不明白改动一条边会对后面造成怎样的影响: 实际上影响的会是一段,当某个车站出发时间受其来人牵制时, ...
- [NOIP2011] 提高组 洛谷P1315 观光公交
题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...
- P1315 观光公交
题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...
- NOIP2011 洛谷P1315 观光公交
题目传送门 先解释一下数组的意义: d[i]表示公交车从第i个点到第i+1个点需要的时间 pas结构体中:t表示这个乘客到公交站牌的时间,u表示起点,v表示终点 wait[i]表示公交车在第i个站点等 ...
- 洛谷P1315 观光公交
SB贪心......暴露了我代码能力巨弱的本质. 题面 解:首先我们应该想到DP(但是我想到了贪心......) 然后分析题目本质,每个点有个限制,最早开走时间不得早于最晚上车时间. 然后我们就可以把 ...
- 洛谷P1315 观光公交 [noip2011D2T3] 贪心
正解:贪心 解题报告: 这里是链接! 唔我觉得还是很容易想到是贪心的,这个难就难在怎么贪心 下面列一下常见的几个贪心思想: 1)根据车上的人数排序,人最多的那条路用加速器 错误,人数多并不意味着加速的 ...
- 洛谷P1315 [NOIP2011提高组Day2T3] 观光公交
P1315 观光公交 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号 ...
- noip 2011观光公交
P1315 观光公交 95通过 244提交 题目提供者该用户不存在 标签贪心递推2011NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 风景迷人的小城Y 市,拥有n 个美 ...
随机推荐
- bzoj3638
费用流+线段树 看见这个题我们马上就能想到费用流,设立源汇,分别向每个点连接容量为1费用为0的边,然后相邻的点之间连边,费用为点权,跑费用流就行了,但是很明显这样会超时,那么我们要优化一下,我们观察费 ...
- 02_电话拨号器intent说明
怎么在第一个Activity打开第二个Activity?在一个Activity中打开另外一个Activity,实际上之前已经做过,就是电话拨号器. package com.itheima.callne ...
- ubuntu/linuxmint搜狗输入法无法输入中文或崩溃
执行下列命令: cd ~/.config rm -rf SogouPY SogouPY.users sogou-qimpanel 然后重启电脑.
- Gym 100531A Alarm Clock (水题)
题意:给定一个被高亮的数,问你是不是有个时间恰好高亮是这个数. 析:直接暴力,直接暴力,枚举每一位时间,当然也可以枚举时间,能找到就是有,找不到就算了. 代码如下: #pragma comment(l ...
- E20180205-hm
insensitive adj. 不敏感的; 感觉迟钝的; (对某事物) 无感觉的; (对变化) 懵然不知的; occurence 出现,发生; capital n. 资本; 首都; 资源; 大写字 ...
- python pip安装第三方模块
一.pip工具使用 安装windows版本python,自带pip工具.2者路径相同. 如果设置了环境路径,可以直接在命令提示符窗口下尝试运行pip.如果没有设置环境路径,可以先cd命令到pip工具的 ...
- 使用Quartz实现定时作业
该文章是系列文章 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业 的其中一篇. Quartz是一个开源的作业调度框架,准确的称谓应该是 Quartz.Net,它是Ja ...
- MFC中利用CString和Format成员函数将数字格式化输出
str.Format("格式控制字符串”,输出列表): 格式控制字符串包括格式字符串和非格式字符串,用双引号括起来.其中非格式字符串原样输出. 格式字符串是以%开头的字符串:%[标识][输出 ...
- _bzoj1798 [Ahoi2009]Seq 维护序列seq【线段树 lazy tag】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1798 注意,应保证当前节点维护的值是正确的,lazy tag只是一个下传标记,在下传时应即时 ...
- Linux环境下使用yum安装zip和unzip
Linux环境下使用yum安装zip和unzip. yum install zip yum install unzip