好久没出去旅游啦!森森决定去 Z 省旅游一下。

Z 省有 n 座城市(从 1 到 n 编号)以及 m 条连接两座城市的有向旅行线路(例如自驾、长途汽车、火车、飞机、轮船等),每次经过一条旅行线路时都需要支付该线路的费用(但这个收费标准可能不止一种,例如车票跟机票一般不是一个价格)。

Z 省为了鼓励大家在省内多逛逛,推出了旅游金计划:在 i 号城市可以用 1 元现金兑换 ai​ 元旅游金(只要现金足够,可以无限次兑换)。城市间的交通即可以使用现金支付路费,也可以用旅游金支付。具体来说,当通过第 j 条旅行线路时,可以用 cj​ 元现金 dj​ 元旅游金支付路费。注意: 每次只能选择一种支付方式,不可同时使用现金和旅游金混合支付。但对于不同的线路,旅客可以自由选择不同的支付方式。

森森决定从 1 号城市出发,到 n 号城市去。他打算在出发前准备一些现金,并在途中的某个城市将剩余现金 全部 换成旅游金后继续旅游,直到到达 n 号城市为止。当然,他也可以选择在 1 号城市就兑换旅游金,或全部使用现金完成旅程。

Z 省政府会根据每个城市参与活动的情况调整汇率(即调整在某个城市 1 元现金能换多少旅游金)。现在你需要帮助森森计算一下,在每次调整之后最少需要携带多少现金才能完成他的旅程。

输入格式:

输入在第一行给出三个整数 n,m 与 q(1≤n≤105,1≤m≤2×105,1≤q≤105),依次表示城市的数量、旅行线路的数量以及汇率调整的次数。

接下来 m 行,每行给出四个整数 u,v,c 与 d(1≤u,v≤n,1≤c,d≤109),表示一条从 u 号城市通向 v 号城市的有向旅行线路。每次通过该线路需要支付 c 元现金或 d 元旅游金。数字间以空格分隔。输入保证从 1 号城市出发,一定可以通过若干条线路到达 n 号城市,但两城市间的旅行线路可能不止一条,对应不同的收费标准;也允许在城市内部游玩(即 u 和 v 相同)。

接下来的一行输入 n 个整数 a1​,a2​,⋯,an​(1≤ai​≤109),其中 ai​ 表示一开始在 i 号城市能用 1 元现金兑换 ai​ 个旅游金。数字间以空格分隔。

接下来 q 行描述汇率的调整。第 i 行输入两个整数 xi​ 与 ai′​(1≤xi​≤n,1≤ai′​≤109),表示第 i 次汇率调整后,xi​ 号城市能用 1 元现金兑换 ai′​ 个旅游金,而其它城市旅游金汇率不变。请注意:每次汇率调整都是在上一次汇率调整的基础上进行的。

输出格式:

对每一次汇率调整,在对应的一行中输出调整后森森至少需要准备多少现金,才能按他的计划从 1 号城市旅行到 n 号城市。

再次提醒:如果森森决定在途中的某个城市兑换旅游金,那么他必须将剩余现金全部、一次性兑换,剩下的旅途将完全使用旅游金支付。


#include<iostream>
#include<queue>
#include<vector>
#include<set>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int, ll> PII;
const int N = 1e5 + 5;
ll INF = 1e18 + 1;//旅游先现金,再旅游金
vector<PII> cash[N], travel[N];
bool st1[N], st2[N];
ll d1[N], d2[N], c, d, ai, a[N], trans[N];
int n, m, q, u, v, xi;
multiset<long long> minCost;
struct node {int id;ll dis;friend int operator < (const node& a, const node& b)//优先队列需要自定义<类型{return a.dis > b.dis;}
};
priority_queue<node> Q;
/*
vector <>cash[],任意一个vector 可以存储 初始结点的所有出度边的 尾结点与权重1. ll d【】用来存储 初始结点到尾结点的 权重,利用松弛的特性一遍遍的读入,更新权重值
2.  st[] 表示结点是否被访问,访问过的结点不作为初始结点
1与2都是缔结斯科拉算法的核心内容
Dijkstra 算法主要做两件事情:
(1)从列表中找最值
(2)更新列表*/
void DIJ(int start, vector<PII> cash[], ll d[], bool st[]) {fill(d, d + n + 1, INF);//fill[d,d+n+1),INFd[start] = 0;Q.push(node{ start,0 });while (Q.size()) {int x = Q.top().id;Q.pop();if (st[x]) continue;st[x] = 1;for (int i = 0; i < cash[x].size(); i++) {if (d[cash[x][i].x] > d[x] + cash[x][i].second) {d[cash[x][i].x] = d[x] + cash[x][i].y;Q.push(node{ cash[x][i].x,d[cash[x][i].x] });}}}
}
int main()
{cin >> n >> m >> q;for (int i = 0; i < m; i++) {cin >> u >> v >> c >> d;cash[u].push_back({ v,c });travel[v].push_back({ u,d });}for (int i = 1; i <= n; i++) cin >> a[i];DIJ(1, cash, d1, st1);//d1【】记录1结点到其余结点的最短的现金DIJ(n, travel, d2, st2);//d2【】记录n结点到其余结点的最短的旅游金,for (int i = 1; i <= n; i++) {//枚举中转点if (d1[i] == INF || d2[i] == INF) continue;trans[i] = d1[i] + (d2[i] + a[i] - 1) / a[i];//比整数多就得多换一块钱,很巧的方法minCost.insert(trans[i]);//插入过后就以平衡二叉数的样子分布}for (int i = 0; i < q; i++) {cin >> xi >> ai;if (a[xi] == ai || !trans[xi]) cout << *minCost.begin() << endl;else{minCost.erase(minCost.find(trans[xi]));a[xi] = ai;trans[xi] = d1[xi] + (d2[xi] + a[xi] - 1) / a[xi];//比整数多就得多换一块钱 minCost.insert(trans[xi]);cout << *minCost.begin() << endl;}}return 0;
}

set/multiset用法详解:https://blog.csdn.net/longshengguoji/article/details/8546286

7-4 森森旅游 (20 分)相关推荐

  1. L3-1 森森旅游 (30 分)

    L3-1 森森旅游 (30 分) 好久没出去旅游啦!森森决定去 Z 省旅游一下. Z 省有 n 座城市(从 1 到 n 编号)以及 m 条连接两座城市的有向旅行线路(例如自驾.长途汽车.火车.飞机.轮 ...

  2. 重返天梯-L3-028 森森旅游 (30 分) (堆优化dijkstra+multiset)

    题目描述 重返天梯-L3-028 森森旅游 (30 分)原题链接 森森决定从 1 号城市出发,到 n 号城市去.他打算在出发前准备一些现金,并在途中的某个城市将剩余现金 全部 换成旅游金后继续旅游,直 ...

  3. L3-028 森森旅游 (30 分)-PAT 团体程序设计天梯赛 GPLT

    好久没出去旅游啦!森森决定去 Z 省旅游一下. Z 省有 n 座城市(从 1 到 n 编号)以及 m 条连接两座城市的有向旅行线路(例如自驾.长途汽车.火车.飞机.轮船等),每次经过一条旅行线路时都需 ...

  4. 7-2 旅游规划 (20 分)c语言,浙江省2008年7月高等教育自学考试旅游资源规划与开发A卷2...

    二.双项选择题(本大题共7小题,每小题2分,共14分) 在每小题列出的五个备选项中有两个是符合题目要求的,请将其代码填写在题后的括号内.错选.多选.少选或未选均无分. 1.属于旅游资源的经济特征表现的 ...

  5. 旅游平台分账模式是什么样的?

    在国民经济全面复苏的背景下,各行业也呈持续回升趋势.以旅游行业为例,中国旅游研究院数据显示,2021年第一季度旅游经济运行综合指数达到10572,同比和环比分别上升36.8%和20.4%,说明旅游行业 ...

  6. 【2019全国职业技能大赛大数据技术】任务四:14-数据可视化(20分_题目+答案<图片+分值>)

    [任务说明] 任务四 : 数据可视化 (20 分 ) 本任务中 所需要 的原始数据四 存放于任务四 MySQL 的 的 project_hotels 数据库 和 计算机 桌面/H3CU_hotel/d ...

  7. 7-1 查找书籍(20 分)(程序设计天梯赛模拟练习题)

    7-1 查找书籍(20 分) 给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价. 输入格式: 输入第一行给出正整数n(<10),随后给出n本书的信息.每本书 ...

  8. PTA—输出全排列 (20分) 递归回溯思想

    PTA-输出全排列 (20分) 递归回溯思想 题目要求: 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间. 输入格式: 输入给出 ...

  9. 2、求100以内的素数之和。(20分)

    题目: /* 2.求100以内的素数之和.(20分) */ 代码: public class Two207 {public static void main(String[] args) {int s ...

最新文章

  1. 关于MySQL出现锁等待lock wait timeout exceeded; try restarting transaction 的解决方案
  2. Swift之深入解析“泛型”的底层原理
  3. 高手进阶:/etc/profile环境变量配置解析
  4. c语言最佳适应算法实验报告,操作系统实验报告---主存分配与回收(最佳适应算法)...
  5. Java GC系列(1):Java垃圾回收简介
  6. [每日一题jQuery] jQuery选择器总结:进一步过滤、同级操作、后代操作
  7. IO流——字节流、字符流
  8. 墙裂推荐!比Sci-Hub网站更好用的文献下载神器!解决所有文献下载烦恼
  9. lable 标签右对齐
  10. 【JAVA SE基础篇】24.包的机制和import详解
  11. 个人建站用php,个人用不花钱 8款PHP建站软件推荐
  12. 开心一刻:邪恶的小明
  13. vue渲染大量数据优化_vue大数据表格卡顿问题的完美解决方案
  14. 2023中国眼博会/护眼健康展/济南护眼贴展/山东护眼仪展①
  15. UniMSE: Towards Unified Multimodal Sentiment Analysisand Emotion Recognition
  16. 计算机大赛提交文件自制,【获奖分享】第十九届全国电脑制作大赛获奖心得
  17. 毕业设计 stm32的人体健康状态检测系统(项目开源)
  18. 微服务自动化之etcd的安装(centos)和基本介绍
  19. windows xp 驱动开发(三)DDK与WDK WDM的区别
  20. e7用什么主板_Intel最棒的服务器处理器:Xeon E7实测

热门文章

  1. LeetCode 题解之 824. Goat Latin
  2. 12月小红书彩妆、护肤类KOL影响力视频图文排行榜
  3. java 观察者模式讲解_java观察者模式详解
  4. 基于Sentence-Bert的检索式问答系统
  5. 关于 .NET Core(.NET Core 指南)
  6. ctf web shell
  7. 黑帽技术联盟heimaoseo:细说黑帽SEO与白帽SEO
  8. PS制作咖啡闹钟、故障文字
  9. 在职计算机技术考研英语自我介绍,2019考研复试:英语自我介绍范文--在职考研...
  10. 手术分级标准目录2020_2020年3月份即将实施国家标准目录(四)