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

L3-1 森森旅游 (30 分) 出题人:DAI, Longao 单位:杭州百腾教育科技有限公司 好久没出去旅游啦!森森决定去 Z 省旅游一下。 Z 省有 n 座城市(从 1 到 n 编号)以及 m 条连接两座城市的有向旅行线路 输入格式 输出格式 对每一次汇率调整,在对应的一行中输出调整后森森至少需要准备多少现金,才能按他的计划从 1 号城市旅行到 n 号城市。 再次提醒:如果森森决定在途中的某个城市兑换旅游金,那么他必须将剩余现金全部、一次性兑换,剩下的旅途将完全使用旅游金支付。 输入样例 6 11 3 1 2 3 5 1 3 8 阅读详情

题目描述

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

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

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

题目分析

刚拿到题目的时候,在分析到底应该在哪个点全部兑换成旅游金。
我们将题目中描述的旅程分为两段,在p点之前,全部使用现金;在p点之后,全部使用旅游金。然后把每个点作为p点遍历一次就好了。

从数据范围判断出,要用堆优化djikstra( O ( m l o g n ) O(mlogn) O(mlogn))

分段计算现金,需要把后半段的旅游金按城市汇率进行上取整转换为现金(a/b=(a+b-1)/b)。用multiset进行维护,动态的删除保留最小值

  • s.erase(s.find(xxx))

C++

#include <iostream>
#include <cstring>
#include <set>
#include <queue>

using namespace std;

typedef long long LL;
typedef pair<LL, int> PII; // 距离要开成LL

const int N = 1e5 + 10, M = 200010 * 2; // 双向边
const LL INF = 0x3f3f3f3f3f3f3f3fll;

int n, m, q;
// 双图
int h1[N], h2[N], e[M], ne[M], w[M], idx;
LL dist1[N], dist2[N];
bool st[N];
int ratio[N];

void add(int h[], int a, int b, int c) {
    e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}
// 堆优化dijkstra
void dijkstra(LL dist[], int h[], int start) {
    memset(dist, 0x3f, sizeof dist1);
    memset(st, 0, sizeof st);
    priority_queue<PII, vector<PII>, greater<PII>> heap;
    heap.push({0, start});
    dist[start] = 0;
    
    while(heap.size()) {
        auto t = heap.top();
        heap.pop();
        
        int ver = t.second;
        
        if (st[ver]) continue;
        st[ver] = true;
        
        for (int i = h[ver]; ~i; i = ne[i]) {
            int j = e[i];
            if (dist[j] > dist[ver] + w[i]) {
                dist[j] = dist[ver] + w[i];
                heap.push({dist[j], j});
            }
        }
    }
}


int main() {
    scanf("%d%d%d", &n, &m, &q);
    memset(h1, -1, sizeof h1);
    memset(h2, -1, sizeof h2);
    while (m--) {
        int a, b, c, d;
        scanf("%d%d%d%d", &a, &b, &c, &d);
        add(h1, a, b, c), add(h2, b, a, d);
    }
    
    for (int i = 1; i <= n; i++) scanf("%d", &ratio[i]);
    
    dijkstra(dist1, h1, 1);
    dijkstra(dist2, h2, n);

    multiset<LL> S;
    
    for (int i = 1; i <= n; i++)
    	// 节点可达才更新
        if (dist1[i] != INF && dist2[i] != INF) {
            // 上取整固定写法(a+b-1)/b
            S.insert(dist1[i] + (dist2[i] + ratio[i] - 1) / ratio[i]);
        }
    
    while (q--) {
        int x, a;
        scanf("%d%d", &x, &a);
        if (dist1[x] != INF && dist2[x] != INF) {
        	// 不能直接删,会把重复的全部删掉
            S.erase(S.find(dist1[x] + (dist2[x] + ratio[x] - 1) / ratio[x]));
            ratio[x] = a;
            S.insert(dist1[x] + (dist2[x] + ratio[x] - 1) / ratio[x]);
        }
        printf("%lld\n", *S.begin());
    }
    
    return 0;
}

参考资料

acwing.3468Y总

Web自动化神操作:如何用OpenCV 破解滑块验证码? 验证码作为一种安全机制,可以有效防止暴力破解密码、发帖、灌水、刷票等,大家在做 Web 自动化的时候应该有碰到验证码这个难题,一般我们可以和开发沟通请求他们的帮助:去掉验证码或者设置一个万能验证码,而如果开发不帮忙我们该如何去解决呢? 本篇文章以 Java 语言为例教你怎么破解验证码。 现在大多数网址会采用滑块验证码的方式,下面以腾讯的滑块验证码为例,先来看看破解的效果: 要破解滑块验证码,我们一般采取的思路如下: 获取滑块到背景缺口图的距离 通过 selenium 的 Actio 阅读详情

相关推荐

Docker部署OnlyOffice踩坑实录:解决editor.bin下载失败的3种姿势

本文详细解析了Docker部署OnlyOffice时editor.bin下载失败的常见原因,并提供了三种核心解决方案。重点剖析了容器网络配置、Nginx反向代理(特别是proxy_pass设置)以及安全策略调整,帮助开发者彻底解决静态资源加载问题,确保文档协作平台稳定运行。

weixin_29281941的博客 873

L3-028 森森旅游 (30 分)

L3-028 森森旅游 (30 分) 思路:乍一看,题很长,其实他不是很难,就是最后的超时部分处理有点困难。 正向建图求用现金从1到第i个点的最少花费 反向建图求用旅游金从n到第i个点的最少花费 然后我们枚举中间的点,在该点前用现金走,后面用旅游金走,即在该点全部置换成旅游金。为了防止超时,我们利用map进行维护,ans数组存每个点为置换点时所用的最少现金,map【ans【i】】来存等于这种现金的点的数量,这样既排了序,也方便后面的更改汇率操作。两种解法,第二种AC,详见代码,思路不难。 21分,TLE4

weixin_50259946的博客 678

ERA5数据批量下载

ERA5再分析数据的IDM接管下载

qq_38734327的博客 3035

L3-028 森森旅游(单源最短路 + multiset 维护多重集最小值

L3-028 森森旅游 (30 分) 思路: 首先不考虑查询和修改操作,只考虑原始图中的答案 把路径分为前半段现金支付和后半段旅游金支付,可以发现去枚举一个决策点,维护 min(cost1+cost2)min(cost_1+cost_2)min(cost1​+cost2​) 即可 前半段花费显然是单源最短路,后半段建反图也同样是单源最短路 由于后半段是旅游金,需要转化为现金,答案即为 min(cost1+(cost2+ai−1)ai)min(cost_1+ \frac{(cost_2+a_i-1)}{a_i

cosx_的博客 706

高速串行信号仿真避坑指南:为什么你的SIwave Xnet设置了却不出结果?

本文深入解析SIwave中Xnet功能在高速串行信号仿真中的常见问题,包括模型缺失、网络不完整和端口设置错误等关键误区。通过详细的电路元件模型验证、网络完整性检查及端口配置指南,帮助工程师有效解决仿真不出结果的问题,提升信号完整性分析效率。

weixin_29218963的博客 252

rfid标签技术原理

奇怪的是,RFID标签技术原理的深入剖析不仅揭示了其背后的奥秘,也让我们更加全面地认识到这一技术在数字化转型中的重要性和潜力。随着技术的不断进步和应用场景的不断拓展,RFID标签将在更多领域发挥重要作用,为物联网、智能制造等领域的发展注入新的活力。这意味着在一个读写器的覆盖范围内,可以同时读取多个RFID标签的数据,大大提高了数据收集的速度和效率。:RFID标签的“大脑”,负责存储和处理数据。芯片内部集成了存储器、控制逻辑和射频接口等电路,能够接收来自读写器的射频信号,执行相应的数据处理和通信任务。

x3088的博客 2159

L3-028 森森旅游 (30 分)「正反建图 + 最短路 + map」

L3-028 森森旅游 (30 分) 题目描述: n个城市,你要从1跑到n,每条路都有两种支付方式,一种是现金,一种是旅游币,你现在从1出发,初始有x块现金,可以选择在一个城市的将所有的现金换成旅游币,在这个城市之前,只能用现金支付,在这个城市之后只能用旅游币支付。 给出每个城市的汇率,即一块钱可以换多少旅游币 q次询问,每次询问,会改变城市x的汇率为c,问现在最少需要在起点准备多少现金可以到达n 且每次汇率调整都是在上一次汇率调整的基础上进行的 思路: 首先正向以现金建图,跑出i到n的最短路dis

Suryxin's blogs 524

港口集装箱码头运营FlexSim仿真

列队4中的集装箱会根据不同类型的集装箱会放置在不同的堆场,因此根据前面对集装箱设置的标签Type的数值不同,设置不同的发送端口。集装箱到达列队3后,会有70%的集装箱到达堆场,30%的集装箱运出港口,因此在Queue列队3的Flow界面设置按照百分比发送端口,其中70%发送到端口1,即发送到列队4等待进入堆场,30%发送到端口2,即发送至出闸口。通过上述对比表格可以看出,当集卡数量在10的时候,岸桥和场桥的设备利用率达到了最高,当集卡数量为12的时候场桥1和场桥3的利用率有所下降,因此综合考虑。

m0_72514516的博客 1331

(L3-028)森森旅游(dijkstra+multiset用法)

题目链接:PTA | 程序设计类实验辅助教学平台 分析:这道题目由于只能在途中的某个城市兑换旅游金,而且须将剩余现金全部、一次性兑换,剩下的旅途将完全使用旅游金支付,所以我们可以先分别求出1号点到任意其他点所需要的最少现金和从任意点到n号点所需要的最少旅游金,求出来这些我们就可以直接枚举每个点作为中间点寻求最佳兑换点。 从1号点到所有任意其他点的最少现金比较好求,就是直接从1号点跑一边dijkstra即可,关键是如何求出来从任意点到n号点所需要的最少旅游金,其实这个也不难想,就是我们建反边再从n

AC__dream的博客 569

泛微OA与泛微OA之间打通实现统一待办配置

问题:学校OA与集团OA均为泛微Ecology8.0 ,由于流程审批互通的需要,要将两套OA系统打通,实现跨系统的流程流转。

symstandsun的博客 2270

[RK3568 Android11] 开发之调试RK809 codec音频-SPK喇叭

目录 前言 一、注册声卡顺序 二、SPK喇叭路由配置 三、tinyalsa调试工具 前言 瑞芯微RK809是一种复杂的功率管理集成电路(PMIC)集成编解码器,适用于由外部电源供电的多核系统应用;同时它也集成了音频编解码器,这样在硬件设计上可以直接使用RK809 codec功能,不必再外挂个其他codec芯片;RK809 codec不仅支持SPK,还支持耳机,MIC功能; 一、注册声卡顺序 设备树dts里面原厂帮我们配置好了rk809_sound,我们直接...

~未来可期~ 7414

7-13 森森旅游 (30 分)(迪杰斯特拉+multiset)(代码有解析)

7-13 森森旅游 (30 分)(迪杰斯特拉+multiset)(代码有解析)

weixin_52608621的博客 1768

COSMO-RS理论:流体相热力学预测的核心模型与技术突破

摘要:COSMO-RS模型通过量子化学计算分子表面电荷分布,实现了从微观量子尺度到宏观化工过程的热力学预测。该模型基于介电连续介质理论,将分子表面片段化处理,通过σ-剖面描述电荷分布,并计算片段间的静电失配能和氢键能。其核心算法通过自洽化学势方程求解活度系数,克服了传统模型依赖实验参数的局限。随着技术进步,模型引入了高阶描述符和色散力修正,提升了预测精度。在药物研发、化工分离等领域广泛应用,但仍存在对长程有序结构预测不足等局限性。该模型为复杂体系的热力学性质预测提供了重要理论工具。

ASKCOS博客 974

L3-1 森森旅游【稀疏图最短路】

L3-1 森森旅游【稀疏图最短路】 思路: 找到从点1到其他点花钱的最短路 找到从点n到其他点花旅游币的最短路 遍历每个点找到在该点换旅游币的花费,放到一个集合中 对于每次更新税率,把原来该点的花费从集合中取出,然后把更新后的放入 稀疏图用堆优化,O(n2)超时。 #include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> const int N

Alan_Lowe 693

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

L3-028 森森旅游——最短路

假设在编号 x 城市兑换,这样就转化成 1 到 x 用现金支付的最短路 x 到 n 用旅游金支付的最短路。不过要注意因为是有向图,所以1 到 x 建立正向图,x 到 n 就得建立反向图。因为可以选择在一个城市全部兑换,就可以把整个旅程分为兑换前和兑换后的旅程。之后就是关于单点修改和查询最小值了,我用的是小根堆+map。

心如冰清,天塌不惊 418

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【团体程序设计天梯赛】L3-028 森森旅游

单源最短路、dijkstra、小根堆

whaoe_m的博客 511

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

好久没出去旅游啦!森森决定去 Z 省旅游一下。 Z 省有 n 座城市(从 1 到 n 编号)以及 m 条连接两座城市的有向旅行线路(例如自驾、长途汽车、火车、飞机、轮船等),每次经过一条旅行线路时都需要支付该线路的费用(但这个收费标准可能不止一种,例如车票跟机票一般不是一个价格)。 Z 省为了鼓励大家在省内多逛逛,推出了旅游金计划:在 i 号城市可以用 1 元现金兑换 ai 元旅游金(只要现金足够,可以无限次兑换)。城市间的交通即可以使用现金支付路费,也可以用旅游金支付。具体来说,当通过第 j 条旅行线

柳婼 の blog 1976

【数据结构与算法暑期实习】PTA 森森旅游(邻接表+堆优化的Dijkstra算法)

好久没出去旅游啦!森森决定去 Z 省旅游一下。Z 省有 n 座城市(从 1 到 n 编号)以及 m 条连接两座城市的有向旅行线路(例如自驾、长途汽车、火车、飞机、轮船等),每次经过一条旅行线路时都需要支付该线路的费用(但这个收费标准可能不止一种,例如车票跟机票一般不是一个价格)。Z 省为了鼓励大家在省内多逛逛,推出了旅游金计划:在 i 号城市可以用 1 元现金兑换 ai​ 元旅游金(只要现金足够,可以无限次兑换)。城市间的交通即可以使用现金支付路费,也可以用旅游金支付。具体来说,当通过第 j 条旅行线路时,

jynidl的博客 1715

7-4 森森旅游 (20 分)

堆优化dijkstra算法优先队列

zhengzhao_ys的博客 732

L3-1 森森旅游 (只拿了24 分)

首先这道题分没有拿满,但方向或许找对了? L3-1 森森旅游 (30 分) 好久没出去旅游啦!森森决定去 Z 省旅游一下。 Z 省有 n 座城市(从 1 到 n 编号)以及 m 条连接两座城市的有向旅行线路(例如自驾、长途汽车、火车、飞机、轮船等),每次经过一条旅行线路时都需要支付该线路的费用(但这个收费标准可能不止一种,例如车票跟机票一般不是一个价格)。 Z 省为了鼓励大家在省内多逛逛,推出了旅游金计划:在 i 号城市可以用 1 元现金兑换 a​i​​ 元旅游金(只要现金足够,可以无限次兑换)。城市间

带带我咯的博客 1293

2021天梯赛补题

文章目录感想1. L1-82. L2-23. L2-34. L3-15. L3-2 感想 今年大家分数都很高,好多230+,然而我只有209(菜鸡流泪 去年拿了145是学校中游水平,今年仍然是中游QAQ,复盘一下大概就是状态不好+平常训练不注意细节(谁叫你天天玩的啊喂 不能说哪一道题有特别大的问题,但是每一道都出了点小问题叭,就内个拿不了全分,不说了,时隔两周我终于补题了 1. L1-8 L1-078 吉老师的回归 (15 分) 当时只拿了13分,不知道哪错了。妈耶,现在回头一看这么简单,当时可能是拿脚写的

Asunayi的博客 321

第六届GPLT团体程序设计天梯赛

文章目录前言一、L11、人与神 (5 分)2、两小时学完C语言 (5 分)3、强迫症 (10 分)4、降价提醒机器人 (10 分)5、大笨钟的心情 (15 分)6、吉老师的回归 (15 分)二、使用步骤1.引入库2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公.

qq_38582001的博客 2246

【算法精解】从“森森旅游”看双权图最短路径与动态汇率优化

本文深入解析了双权图最短路径算法在动态汇率优化中的应用,以'森森旅游'为例,详细介绍了Dijkstra算法的堆优化实现、邻接表存储优化及动态汇率处理策略。通过构建正向与反向图,结合multiset数据结构,高效解决了旅行规划中的多货币最优路径问题,适用于物流、支付网关等实际场景。

weixin_29304021的博客 195

2021/4/24团队设计天梯赛L3题目集及部分题解

2021/4/24团队设计天梯赛L3题目集及部分题解: 以下题解都是通过PTA测试的,大致保证正确性: 查看题目戳此::PTA题目集 L3题目集L3-01 森森旅游 (30 分)L3-02 还原文件 (30 分)L3-03 可怜的简单题 (30 分) L3-01 森森旅游 (30 分) 题目描述: 好久没出去旅游啦!森森决定去 Z 省旅游一下。 Z 省有 n 座城市(从 1 到 n 编号)以及 m 条连接两座城市的有向旅行线路(例如自驾、长途汽车、火车、飞机、轮船等),每次经过一条旅行线路时都需要支付该线

奋斗小白的博客 3910

DIJ + STL(multiset) - 森森旅游 - CCCC天梯赛 L3-028

DIJ + STL(multiset) - 森森旅游 - CCCC天梯赛 L3-028 题解待补 代码: #include<iostream> #include<cstring> #include<cstdio> #include<queue> #include<set> #define x first #define y second using namespace std; typedef long long ll; typedef pa

njuptACMcxk的博客 642

L3-028 森森旅游(最短路 + multiset)

题面链接 思路: 由题意得每次兑换旅行币都要将现金兑完,所以可以将拆解成两段不同的最短路,一条是从1点出发到i点代表用现金的最短路,直接dijkstra即可;另一条则是从i点到达n点的代表用旅行货币的最短路,反向建图再dijkstra即可。 再枚举每个点作为兑换点时从1~n所需要的现金res[i]并加入multise中,每次修改汇率就是将res[i]删掉,再重新计算res[i]加入到multise中,multise.begin()即为每次修改后的现金最小花费值。 但是我这里的代码还有个一分的测试点一直过不了

Belief_7 1063
上一篇: 2021蓝桥 路径
下一篇: 重返天梯-L3-001 凑零钱 (30 分) (dfs搜索)
CodeSlogan
博客等级 码龄6年 4227粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeSlogan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值