Leetcode 2093. 前往目标城市的最小费用

article/2025/8/4 8:41:31

1.题目基本信息

1.1.题目描述

一组公路连接 n 个城市,城市编号为从 0 到 n - 1 。 输入包含一个二维数组 highways ,其中 highways[i] = [city1i, city2i, tolli] 表示有一条连接城市 city1i 和 city2i 的双向公路,允许汽车缴纳值为 tolli 的费用从 city1i 前往 city2i 或 从 city2i 前往 city1i 。

另给你一个整数 discounts 表示你最多可以使用折扣的次数。你可以使用一次折扣使通过第 ith 条公路的费用降低至 tolli / 2(向下取整)。 最多只可使用 discounts 次折扣, 且 每条公路最多只可使用一次折扣 。

返回从城市0 前往城市 n - 1 的 最小费用 。如果不存在从城市0 前往城市 n - 1 的路径,返回 -1 。

1.2.题目地址

https://leetcode.cn/problems/minimum-cost-to-reach-city-with-discounts/description/

2.解题方法

2.1.解题思路

Dijkstra算法

2.2.解题步骤

第一步,使用常规的方法构建dijkstra,采用堆模式

  • 1.1.构建邻接表形式的图

第二步,使用堆进行遍历。堆中结点的形式为(结点到start的结点的距离,当前结点,剩余的折扣数)

  • 2.1.从堆中弹出最近的结点

  • 2.2.过滤掉堆中在costs中已经存在更近的距离的结点(第一个从堆中弹出(node,remainDiscounts)的一定是最近的)

  • 2.3.在到达终点时,进行退出

  • 2.4.更新当前状态的最短距离

  • 2.5.遍历邻结点并将新的结点压入堆中(分为不使用折扣的结点和使用折扣的虚拟结点)

第三步,没法到达终点的情况

3.解题代码

python代码

from collections import defaultdict
from heapq import heappush, heappopclass Solution:def minimumCost(self, n: int, highways: List[List[int]], discounts: int) -> int:# 同类型Dijkstra题目:Leetcode LCP 35. 电动车游城市# 思路:Dijkstra算法变体# 第一步,使用常规的方法构建dijkstra,采用堆模式# 1.1.构建邻接表形式的图graph = defaultdict(list)for u, v, weight in highways:graph[u].append((v, weight))graph[v].append((u, weight))# 第二步,使用堆进行遍历。堆中结点的形式为(结点到start的结点的距离,当前结点,剩余的折扣数)heap = [(0, 0, discounts)]costs = {}while heap:# 2.1.从堆中弹出最近的结点dist, node, remainDiscounts = heappop(heap)# 2.2..过滤掉堆中在costs中已经存在更近的距离的结点(第一个从堆中弹出(node,remainDiscounts)的一定是最近的)if (node, remainDiscounts) in costs:continue# 2.3.在到达终点时,进行退出if node == n - 1:return dist# 2.4.更新当前状态的最短距离costs[(node, remainDiscounts)] = dist# 2.5.遍历邻结点并将新的结点压入堆中(分为不使用折扣的结点和使用折扣的虚拟结点)for neigh, weight_ in graph[node]:heappush(heap, (dist + weight_, neigh, remainDiscounts))if remainDiscounts > 0:heappush(heap, (dist + int(weight_ / 2), neigh, remainDiscounts - 1))# 第三步,没法到达终点的情况return -1

4.执行结果


http://www.hkcw.cn/article/XwKEDxXuDw.shtml

相关文章

【C++】模板与特化技术全面教程(claude sonnet 4)

第一章:模板的基础概念 (Template Fundamentals) 1.1 什么是模板? 模板 (Template) 是C中的一种泛型编程 (Generic Programming) 机制,它允许我们编写与类型无关的代码。想象一下,如果我们要为不同的数据类型编写相同逻辑的函数&a…

VBA数据库解决方案二十:Select表达式From区域Where条件Order by

《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…

【2025最新】Java图书借阅管理系统:从课程作业到实战应用的完整解决方案

【2025最新】Java图书借阅管理系统:从课程作业到实战应用的完整解决方案 目录 【2025最新】Java图书借阅管理系统:从课程作业到实战应用的完整解决方案**系统概述** **核心功能模块详解****1. 系统登录与权限控制****2. 借阅管理模块****3. 用户角色管理…

结合源码分析Redis的内存回收和内存淘汰机制,LRU和LFU是如何进行计算的?

Redis 内存回收 1. 过期 key 处理 Redis 之所以性能强,最主要的原因就是基于内存存储。然而单节点的 Redis 其内存大小不宜过大,会影响持久化或主从同步性能。我们可以通过修改配置文件来设置Redis的最大内存: 当内存使用达到上限时&#…

NLP学习路线图(十五):TF-IDF(词频-逆文档频率)

在自然语言处理(NLP)的浩瀚宇宙中,TF-IDF(词频-逆文档频率) 犹如一颗恒星,虽古老却依然璀璨。当ChatGPT、BERT等大模型光芒四射时,TF-IDF作为传统方法的代表,其简洁性、高效性与可解…

C++11(上)

历史: 在C98版本后,C11是一次大版本的更新。在C11中新增了许多有用的东西。接下来将由小编来带领大家介绍C11中新增的内容。 列表初始化: 在C中,列表初始化(也称为统一初始化或花括号初始化)是一种使用花括号 {} 来初…

从TCO角度分析IBM Cognos Analytics

一、总拥有成本(TCO)分析 像 Cognos Analytics 这样成熟的企业级 BI 平台,在与新兴的敏捷 BI 工具竞争中,依然能够保持其独特价值和竞争力的关键所在,尤其从企业和组织的长远发展、团队协作以及总拥有成本&#xff08…

使用西门子博图V16时遇到了搜索功能报错的问题,提示缺少SIMATIC Visualization Architect组件怎么办,全网首发

先上解决方案,这个太简单了,直接上官网下载,这个安装包40M,很快就下载完了,然后直接安装就可以了。 官网链接SIMATIC Visualization Architect V16 TRIAL Download - ID: 109772966 - Industry Support Siemens 今天我…

STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联

目录 一、STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联1 TIM1 高级定时器发波1.1 stm32cubemx配置 2 TIM1 ADC COMP DAC级联2.1 stm32cubemx配置 附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^) 一、STM32G4 电机外设篇(三&…

12 Java GUI

Java 在图形开发中的占比并不是特别突出,尤其在传统的客户端图形界面开发方面。不是现代 UI 设计的首选 C#的WinForms(传统)、WPF(现代)是Windows 桌面开发的王者 跨平台(Windows/macOS/Linux)&…

当AI遇见千年古韵:解密“古韵智绘”,让传统纹样焕发新生机

目录: 引言:当千年古韵遇上AI,一场跨越时空的对话“古韵智绘”:不止于复刻,更是创新的引擎核心技术揭秘:AI如何“理解”并“创作”传统纹样? 基石:海量纹样数据库与智能特征提取神笔:基于GANs的AI纹样生成器魔术:风格迁移与融合的艺术桥梁:交互式编辑与开放API接口系…

[AD] Reaper NBNS+LLMNR+Logon 4624+Logon ID

QA QAForela-Wkstn001 的 IP 位址是什麼?172.17.79.129Forela-Wkstn002 的 IP 位址是什麼?172.17.79.136被攻擊者竊取雜湊值的帳戶的使用者名稱是什麼?arthur.kyle攻擊者用來攔截憑證的未知設備的 IP 位址是什麼?172.17.79.135受…

RAG入门之数据导入

LangChain 是什么 LangChain 是一个用于构建基于大语言模型(LLM)应用的开源框架。它提供了一套工具和抽象,让开发者能够轻松构建复杂的AI应用。 LangChain 的核心功能 文档加载和处理:支持多种格式(PDF、文本、网页…

科研学习|科研软件——激活后的Origin导出图时突然出现了demo水印

问题:画完图在导出图形时,导出的图有demo水印,如下图。 解决方法1:右击选择以管理员身份运行。 解决方法2:找到该软件的保存路径,双击Origin64.exe

一:UML类图

类之间的关系 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 学习设计模式的第一步是看懂UML类图,类图能直观的表达类、对象之间的关系,这将有助于后续对代码的编写。 常见的类之间的关系包括:继承…

Python数学可视化——环境搭建与基础绘图

Python数学可视化——环境搭建与基础绘图 数学函数可视化入门(一次函数/三角函数) 本节将建立Python科学计算环境,并创建基础函数绘图工具,可生成一次函数和三角函数的可视化图像,同时结合物理中的匀速直线运动案例。…

mask2former训练自己的语义分割数据集

一、环境配置 1.1下载源码 mask2former: https://github.com/facebookresearch/Mask2Former/tree/maindetectron2: https://github.com/facebookresearch/detectron2下载完后,新建一个文件夹,起个名字(我起的Mask2Former-main&#xff09…

如何使用1panel部署linux网站

找到官网,尝试一下在线安装 如果在线不成功,试一下离线安装 按照指令一步步执行即可,注意换成新版本的名称即可 如果成功,你会看到这个页面 1Panel Log]: [1Panel Log]: 感谢您的耐心等待,安装已完成 [1Panel Log]:…

个人用户进行LLMs本地部署前如何自查和筛选

一、个人用户硬件自查清单(从核心到次要) 1. 显卡(GPU)——决定性因素 显存容量(关键指标): 入门级(8~12GB):可运行7B模型(4bit量化)…

java Map双列集合

单列集合:一次只能添加一个元素 双列集合:一次添加两个元素,左边的叫键(唯一的不能重复),右边叫值(可以重复),键和值一一对应。这样一对叫:键值对/键值对对象…