博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Luogu P1315 观光公交
阅读量:4644 次
发布时间:2019-06-09

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

# 解题思路

一开始自己想了一个贪心,虽然贪心的主要思路是对的,但并不会统计游客用的旅行时间。所以就去题解里面看看,第一篇是最小费用最大流,会比较麻烦,所以就去看了看底下的贪心,第一篇贪心被卡掉了,看第二篇,嗯,好像还行。再看看第三篇,写的好简略。不过看懂了。

贪心的主要思路就是在经过游客最多的路上使用加速器,但是还要注意,如果在一条路径的终点,有的游客到达的时间比现在公交车到达的时间还要晚的话就没必要用加速器了,因为再早到达你也必须等着游客上车吧。

考虑用优先队列保证得到最大的价值(经过的游客的数量),如果有一个点满足下面的条件:

最晚到达的乘客的到达时间比公交车的到达时间还要晚。

那就将整段路程从这里分开,分别去考虑劈开后的路程。

昨晚上面这些再来考虑如何处理每段路程。找一下这段路程中,每两个点之间的路途上,最短的等待时间,这就是要使用(用作用)的加速器数量的最大值。(因为超过了这个值就不会再有影响了)

 

# 代码

#include 
#include
#include
#include
using namespace std;inline int read() { int x = 0, f = 1; char c = getchar(); while (c < '0' || c > '9') {
if(c == '-') f = -1; c = getchar();} while (c <= '9' && c >= '0') {x = x*10 + c-'0'; c = getchar();} return x * f;}const int maxn = 1003;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
Q;inline void sol(int l, int r) { if(l >= r) return ; if(d[l] == 0) {sol(l+1, r); return ;} for(int i=l+1; i
= b[i]) { sol(l, i), sol(i, r); return ; } int mn = d[l], val = v[r]; for(int i=l+1; i

 

转载于:https://www.cnblogs.com/bljfy/p/9703463.html

你可能感兴趣的文章
九度OJ 1135:字符串排序 (排序)
查看>>
C6678 PCIe boot default configuration value
查看>>
函数模板
查看>>
java序列化
查看>>
sizeof运算符
查看>>
α训练营——项目任务--界面
查看>>
DAY1-作业
查看>>
关于浮动与清除浮动
查看>>
mongoose中的versionKey
查看>>
java ->Arrays类
查看>>
generate failed: Cannot resolve classpath entry: mysql-connector-java-5.1.38.jar
查看>>
PHP安装posix、pctl扩展
查看>>
window.requestAnimationFrame()
查看>>
AJAx 刷新页面
查看>>
查找单向链表中倒数第K个节点
查看>>
vue <input type="file">上传图片、预览、删除
查看>>
移动端H5地图离线瓦片方案(1)(2)
查看>>
缓存的三种方案
查看>>
CentOS 7 下安装 Nginx
查看>>
Java-Day04,基本语法
查看>>