鉄道旅行 (Railroad Trip)
题意
有 \(n\) 个城市, \(n-1\) 条道路。其中第 \(i\) 个城市和第 \(i+1\) 个城市由第 \(i\) 条道路连接。通过一条道路有两种付费方式:每次支付费用 \(a_i\) ,或者支付一次费用 \(c_i\) ,然后每次支付费用 \(b_i\) 。
\(m-1\) 次旅行,第 \(j\) 次旅行从城市 \(p_{j}\) 到城市 \(p_{j+1}\) 。
求完成旅行所需的最小费用。
分析与解答
发现每条道路对答案的影响是独立的。
考虑统计一段道路被经过的次数,然后对于每段道路在两种方案中取最小即可。
对于每次旅行都把所有经过道路的经过次数 \(+1\) ,最后统计即可。
那么这就是一个区间修改,单点查询的问题。
所以差分一下就好了。
注意这里统计的是起点和终点间的边经过的数量,所以每次把一段旅行的起止点中标号较小的城市在差分数组中 \(+1\),标号较大的城市在差分数组中 \(-1\) 即可。
时间复杂度 $ \Theta(n)$
就做完了,就这么简单
代码中无意间卡空间,请见谅。
Code
#include <cstdio>
#include <iostream>
#define RE register
using namespace std;
inline int read()
{
int x = 0; char c = getchar();
while(c<'0'||c>'9') c = getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x;
}
inline int min(int a, int b){return a<b?a:b;}
inline int max(int a, int b){return a>b?a:b;}
const int MAXN = 100010;
int n, m;
int d[MAXN];
int main()
{
n = read(); m = read();
RE int now, last = 0;
for(RE int i=1;i<=m;i++)
{
now = read();
if(last) ++d[min(last, now)], --d[max(last, now)];
// 差分,标号较小的 +1 ,标号较大的 -1
last = now;
}
for(RE int i=1;i<n;i++)
d[i] += d[i-1]; // 还原成真正的经过次数
long long ans = 0;
for(RE int i=1;i<n;i++)
{
RE int a = read(), b = read(), c = read();
ans += min(1ll*a*d[i], 1ll*d[i]*b+c);
// 直接计算费用,每条道路取最小。
}
printf("%lld\n",ans);
return 0;
}
鉄道旅行 (Railroad Trip)的更多相关文章
- 在腾讯开发 QQ IM 的工作体验是怎样的?
转载 http://blog.csdn.net/kobejayandy/article/details/8685271 目录 一.引言 二.个人网站 三.Oracle/支付宝/旺旺 四.淘宝技术发展( ...
- FC红白机游戏列表(维基百科)
1055个fc游戏列表 日文名 中文译名 英文版名 发行日期 发行商 ドンキーコング 大金刚 Donkey Kong 1983年7月15日 任天堂 ドンキーコングJR. 大金刚Jr. Donkey K ...
- EF里单个实体的增查改删以及主从表关联数据的各种增删 改查
本文目录 EF对单个实体的增查改删 增加单个实体 查询单个实体 修改单个实体 删除单个实体 EF里主从表关联数据的各种增删改查 增加(增加从表数据.增加主从表数据) 查询(根据主表找从表数据.根据从表 ...
- EF里一对一、一对多、多对多关系的配置和级联删除
本章节开始了解EF的各种关系.如果你对EF里实体间的各种关系还不是很熟悉,可以看看我的思路,能帮你更快的理解. I.实体间一对一的关系 添加一个PersonPhoto类,表示用户照片类 /// < ...
- EF 7 Code First
加载方式三种 1. Eager Loading 2. Lazy Loading 3.Explicit Loading 使用EF在与关系型数据库的交互中不可避免地需要加载数据,如何加载数据变得至关重要. ...
- EF——一对一、一对多、多对多关系的配置和级联删除 04(转)
EF里一对一.一对多.多对多关系的配置和级联删除 本章节开始了解EF的各种关系.如果你对EF里实体间的各种关系还不是很熟悉,可以看看我的思路,能帮你更快的理解. I.实体间一对一的关系 添加一个P ...
- 团队作业(五)——旅游行业的手机App
首先是作业要求: 在PM 带领下, 每个团队深入分析下面行业的App, 找到行业的Top 5 (从下面的三个备选中,任选一个行业即可) 英语学习/词典App 笔记App 旅游行业的手机App 我们选择 ...
- Atcoder 2159 連結 / Connectivity(并查集+map乱搞)
問題文N 個の都市があり.K 本の道路と L 本の鉄道が都市の間に伸びています. i 番目の道路は pi 番目と qi 番目の都市を双方向に結び. i 番目の鉄道は ri 番目と si 番目の都市を双 ...
- [ARC061E]すぬけ君の地下鉄旅行 / Snuke's Subway Trip
题目大意:Snuke的城镇有地铁行驶,地铁线路图包括$N$个站点和$M$个地铁线.站点被从$1$到$N$的整数所标记,每条线路被一个公司所拥有,并且每个公司用彼此不同的整数来表示. 第$i$条线路($ ...
- AtCoder Regular Contest 061 E - すぬけ君の地下鉄旅行【最短路】
具体题解又要搬大哥的了,嘿嘿~ 请点击:G点我 这道题目的难点就是同一家公司的路直接走不需要再花费,然后多了一个公司这个东西,这个不像是边的副权值(瞎说的)之类的东西,这是对于路来说的,路的属性... ...
随机推荐
- VmWare安装Centos后配置Net网络SSH链接问题看这一遍就够了
1:首先安装VmWare 2:启动时在安装对应的Linux版本,网络就默认 net即可 3:都安装好了之后,注意有一个大坑,输入的账号密码都不能准确登录 最后发现是linux默认的输入法没有启用电脑键 ...
- JavaScript:this指针
this指针,存储的是一个内存地址,如同变量一样,指向一块内存区域: 而这个内存区域,保存的就是一个对象的数据,那么这个对象是什么呢? 通常来说,this指针,主要是用在方法(函数)中,用来指向调用方 ...
- APP上架因收集个人信息问题被拒绝该怎么解决?
近年来,随着信息技术的快速发展和移动互联网应用的普及,越来越多的应用大量收集.使用个人信息,给人们生活带来便利的同时,也出现了对个人信息的非法收集.滥用.泄漏等问题,个人信息安全面临严重威胁. 201 ...
- .Net 7 团队把国内的龙芯确实当做一等公民和弃用的项目
楔子: 国内龙芯据说是用的自己的指令集,在研究ILC的时候,发现了龙芯在微软那边确实是一等公民的存在. 龙芯官网 龙芯平台.NET,是龙芯公司基于开源社区.NET独立研发适配的龙芯版本,我们会长期进行 ...
- [编程基础] Python日志记录库logging总结
Python日志记录教程展示了如何使用日志记录模块在Python中进行日志记录. 文章目录 1 介绍 1.1 背景 1.2 Python日志记录模块 1.3 根记录器 2 Python logging ...
- API 网关的功能用途及实现方式
1. API 网关诞生背景 前言 API 经济生态链已经在全球范围覆盖, 绝大多数企业都已经走在数字化转型的道路上,API 成为企业连接业务的核心载体, 并产生巨大的盈利空间.快速增长的 API 规模 ...
- BC7-牛牛的字符矩形
题目描述 牛牛尝试用键盘读入一个字符,然后在屏幕上显示用这个字符组成的 3*3 的矩形. 输入描述 一行读入一个 char 类型的字符. 输出描述 输出这个字符组成的 3*3 矩形. 示例 1 输入: ...
- 初探富文本之OT协同实例
初探富文本之OT协同实例 在前边初探富文本之OT协同算法一文中我们探讨了为什么需要协同.为什么仅有原子化的操作并不能实现协同.为什么要有操作变换.如何进行操作变换.什么时候能够应用操作.服务端如何进行 ...
- Loadrunner的函数收集
1.int web_url( const char *StepName, const char *url, <List of Attributes>, [EXTRARES, <Lis ...
- iTab浏览器插件使用教程
iTab浏览器插件 iTab是一个好看好用的自定义卡片式浏览器新标签页扩展. 安装iTab标签页扩展后,您将告别呆板无趣的原生标签页,享受iTab标签页为您带来的个性化新体验: iTab资源 安装教程 ...