P4568 [JLOI2011] 飞行路线

题目描述

Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在 nnn 个城市设有业务,设这些城市分别标记为 000n−1n-1n1,一共有 mmm 种航线,每种航线连接两个城市,并且航线有一定的价格。

Alice 和 Bob 现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空公司对他们这次旅行也推出优惠,他们可以免费在最多 kkk 种航线上搭乘飞机。那么 Alice 和 Bob 这次出行最少花费多少?

输入格式

第一行三个整数 n,m,kn,m,kn,m,k,分别表示城市数,航线数和免费乘坐次数。

接下来一行两个整数 s,ts,ts,t,分别表示他们出行的起点城市编号和终点城市编号。

接下来 mmm 行,每行三个整数 a,b,ca,b,ca,b,c,表示存在一种航线,能从城市 aaa 到达城市 bbb,或从城市 bbb 到达城市 aaa,价格为 ccc

输出格式

输出一行一个整数,为最少花费。

输入输出样例 #1

输入 #1

5 6 1
0 4
0 1 5
1 2 5
2 3 5
3 4 5
2 3 3
0 2 100

输出 #1

8

说明/提示

数据规模与约定

对于 30%30\%30% 的数据,2≤n≤502 \le n \le 502n501≤m≤3001 \le m \le 3001m300k=0k=0k=0

对于 50%50\%50% 的数据,2≤n≤6002 \le n \le 6002n6001≤m≤6×1031 \le m \le 6\times10^31m6×1030≤k≤10 \le k \le 10k1

对于 100%100\%100% 的数据,2≤n≤1042 \le n \le 10^42n1041≤m≤5×1041 \le m \le 5\times 10^41m5×1040≤k≤100 \le k \le 100k100≤s,t,a,b<n0\le s,t,a,b < n0s,t,a,b<na≠ba\ne ba=b0≤c≤1030\le c\le 10^30c103

另外存在一组 hack 数据。

对于这题,看似与 P1948 [USACO08JAN] Telephone Lines S 十分相像,都是在 k 次特殊机会下求最短路。但稍微有点不同。P1948 需要最小化最长边,故其二分时的 check 相对简单,可以采取二分策略。但本题要求最小化路径,此时的 check 变为了能否在总花费不超过 mid 的情况下从 s 到达 t ,难度几乎和原问题一样。故我们可以考虑利用分层图,将使用过的免费次数used_k 加入路径状态中,在寻最短路时更新两种状态:使用免费次数和不使用免费次数。最后从所有 used_k 中找到到 t 的最短路。

#include<bits/stdc++.h>
using namespace std;const int INF = INT_MAX;int main(){int n, m, k, s, t;cin >> n >> m >> k >> s >> t;vector<vector<pair<int, int>>> g(n);for(int i = 0; i < m; i++){int a, b, c;cin >> a >> b >> c;g[a].emplace_back(b, c);g[b].emplace_back(a, c);}vector<vector<int>> dist(n, vector<int>(k+1, INF));priority_queue<tuple<int, int, int>, vector<tuple<int, int, int>>, greater<>> pq;dist[s][0] = 0;pq.emplace(0, s, 0);while(!pq.empty()){auto [d, u, used_k] = pq.top();pq.pop();if(d > dist[u][used_k]) continue;for(auto i : g[u]){int v = i.first;int w = i.second;if(dist[u][used_k] + w < dist[v][used_k]){dist[v][used_k] = dist[u][used_k] + w;pq.emplace(dist[v][used_k], v, used_k); }if(used_k < k){if(dist[u][used_k] < dist[v][used_k+1]){dist[v][used_k+1] = dist[u][used_k];pq.emplace(dist[v][used_k+1], v, used_k+1);}}}}int ans = INF;for(int i = 0;i<=k;i++){if(dist[t][i]<ans) ans = dist[t][i];}cout<<ans;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91370.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91370.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/91370.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 中的聚簇索引和非聚簇索引的区别

MySQL 中的聚簇索引和非聚簇索引的区别 总结性回答 聚簇索引和非聚簇索引的主要区别在于索引的组织方式和数据存储位置。聚簇索引决定了表中数据的物理存储顺序&#xff0c;一个表只能有一个聚簇索引&#xff1b;而非聚簇索引是独立于数据存储的额外结构&#xff0c;一个表可以…

全局异常处理,可以捕捉到过滤器中的异常吗?

全局异常处理,可以捕捉到过滤器中的异常吗? 全局异常处理器(如Spring的@ControllerAdvice+@ExceptionHandler)默认无法直接捕获过滤器(Filter)中抛出的异常,这是由过滤器和Spring MVC的执行顺序及职责边界决定的。具体原因和解决方案如下: 一、为什么全局异常处理器默…

市政道路积水监测系统:守护城市雨天出行安全的 “智慧防线”

市政道路积水监测系统&#xff1a;守护城市雨天出行安全的 “智慧防线”柏峰【BF-DMJS】每逢汛期&#xff0c;强降雨引发的城市道路积水问题&#xff0c;不仅会造成交通拥堵&#xff0c;更可能危及行人和车辆安全&#xff0c;成为困扰城市管理的一大难题。传统的积水监测主要依…

搭建HAProxy高可用负载均衡系统

一、HAProxy简介Haproxy 是一个使用C语言编写的自由及开放源代码软件&#xff0c;其提供高可用性、负载均衡&#xff0c;以及基于TCP和HTTP的应用程序代理。haproxy优点 1. Haproxy支持两种代理模式 TCP&#xff08;四层&#xff09;和HTTP&#xff08;七层&#xff09;&#x…

GO语言 go get 下载 下来的包存放在哪里

在 Go 中&#xff0c;通过 go get&#xff08;或 Go Modules 下的自动下载&#xff09;获取的第三方包&#xff0c;具体存储位置取决于你是否启用了 Go Modules&#xff08;推荐方式&#xff09;。✅ 1. 如果你使用了 Go Modules&#xff08;Go 1.11 默认开启&#xff09;当前 …

PostgreSQL 14.4 ARM64 架构源码编译安装指南

PostgreSQL 14.4 ARM64 架构源码编译安装指南文章目录PostgreSQL 14.4 ARM64 架构源码编译安装指南说明环境要求操作系统1. 系统环境准备1.1 更新系统包1.2 创建 PostgreSQL 用户2. 解压 PostgreSQL 14.4 源码包3. 配置编译选项4. 编译源代码5. 安装 PostgreSQL6. 初始化数据库…

【科普】在STM32中有哪些定时器?

在 STM32 单片机中&#xff0c;定时器种类丰富&#xff0c;不同系列&#xff08;如 F1、F4、H7 等&#xff09;略有差异&#xff0c;以下是常见的定时器类型及核心特点&#xff1a;1. 基本定时器&#xff08;TIM6、TIM7&#xff09;功能&#xff1a;仅具备定时计数功能&#xf…

git使用秘诀(详解0到1)

前言&#xff1a; 不知道大家有没有使用git提交代码或者拉取代码的经历&#xff0c;自从上一家公司实习结束以后&#xff0c;对git的使用历历在目&#xff0c;从一开始的add、commit到后来的pull都有着许多的疑惑。 自从有一次merge代码以后&#xff0c;被师兄批了一顿以后(不小…

RHEL 9.5 离线安装 Ansible 完整教程

文章目录RHEL 9.5 离线安装 Ansible 完整教程环境准备系统要求准备工作清单方法一&#xff1a;使用 RPM 包离线安装步骤 1&#xff1a;在联网机器上下载必要的 RPM 包步骤 2&#xff1a;创建本地仓库元数据步骤 3&#xff1a;在离线服务器上安装方法二&#xff1a;使用 Python …

44、鸿蒙HarmonyOS Next开发:视频播放 (Video)组件和进度条 (Progress)组件的使用

目录 视频播放 (Video) 创建视频组件 加载视频资源 加载本地视频 加载沙箱路径视频 加载网络视频 添加属性 事件调用 Video控制器使用 其他说明 示例代码 进度条 (Progress) 创建进度条 设置进度条样式 场景示例 视频播放 (Video) Video组件用于播放视频文件并…

6、微服务架构常用十种设计模式

目录 1、微服务架构 2、微服务架构的优点 3、微服务架构的缺点 4、何时使用微服务架构 5、微服务架构常用十种设计模式 ① 独享数据库&#xff08;Database per Microservice&#xff09; ② 事件源&#xff08;Event Sourcing&#xff09; ③ 命令和查询职责分离&…

Docker 初学者需要了解的几个知识点 (六):docker-compose.yml (ThinkPHP)

下面这个文 docker-compose.yml 文件定义了一个包含 PHP、Nginx、MySQL、Redis 的完整 ThinkPHP 开发环境&#xff0c;各配置项的含义如下&#xff1a;version: 3.8services:# PHP-FPM 服务php-fpm:image: php:8.1-fpmvolumes:- ./tp-demo:/var/www/html- ./php.ini:/usr/local…

TiDB 详解

TiDB 详解&#xff1a;架构、特性与应用实践 TiDB 是 PingCAP 公司开发的开源分布式 NewSQL 数据库&#xff0c;采用 “计算-存储分离” 架构设计&#xff0c;兼具传统关系型数据库的 ACID 事务特性和 NoSQL 系统的水平扩展能力。以下是 TiDB 的全面技术解析。一、核心架构设计…

推客小程序商业模型设计:合规分佣体系×盈利模式×LTV提升策略

一、推客小程序的市场背景与商业价值在当今移动互联网红利逐渐消退的背景下&#xff0c;社交电商正成为流量增长的新突破口。推客小程序作为一种基于社交关系的分销工具&#xff0c;完美融合了社交传播与电商变现的双重优势&#xff0c;为企业和个人创业者提供了全新的商业机会…

Matlab处理多个循环的判断的方式:

1、使用正则表达式&#xff1a;pattern strcat(\b, strjoin(tuple, \b|\b), \b);% 4. 逐行处理文件内容 modifiedContents {}; % 存储修改后的内容 for i 1:length(fileContents)line fileContents{i};% 使用正则表达式检查当前行是否包含元组中的任何元素if ~isempty(reg…

从字符串中“薅出”最长子串:LeetCode 340 Swift 解法全解析

文章目录摘要描述题解答案题解代码分析详细解析&#xff1a;示例测试及结果结果解释&#xff1a;时间复杂度总结摘要 在日常开发中&#xff0c;我们经常需要处理字符串&#xff0c;比如分析用户输入、文本挖掘、数据清洗等等。而这道题就特别实用&#xff1a;如何找到一个字符…

时序数据库厂商 TDengine 发布 AI 原生的工业数据管理平台 IDMP,“无问智推”改变数据消费范式

在工业企业越来越依赖数据驱动决策的今天&#xff0c;数据的获取不再是难题&#xff0c;难的是从纷繁复杂的数据中提炼出有用的信息。而 AI 的崛起&#xff0c;正在重塑整个数据分析的逻辑。 7 月 29 日晚&#xff0c;TDengine 发布了一款全新产品 —— TDengine IDMP&#xf…

HBase、MongoDB 和 Redis 的区别详解

这三者都是流行的 NoSQL 数据库&#xff0c;但设计目标、数据模型和适用场景有显著差异。以下是它们的核心对比&#xff1a; 1. 数据模型对比特性HBaseMongoDBRedis数据模型宽列存储&#xff08;类似 BigTable&#xff09;文档存储&#xff08;BSON/JSON&#xff09;键值存储&a…

设计模式之单例模式及其在多线程下的使用

很多时候&#xff0c;我们在使用类创建类的实例并不想可以创建很多实例对象&#xff0c;比如在数据库连接的时候&#xff0c;对于一个数据库的连接通常只需要连接池中的某个连接的实例&#xff0c;连接一次即可&#xff0c;对于session会话&#xff0c;用户在访问网页做会话保持…

Apache Ignite 2.8 引入的新指标系统(New Metrics System)的完整说明

这段文档是关于 Apache Ignite 2.8 引入的“新指标系统&#xff08;New Metrics System&#xff09;” 的完整说明。这是 Ignite 监控体系的一次重大升级&#xff0c;相比旧的、分散的统计方式&#xff0c;新系统更统一、灵活、可扩展。 我们来逐层拆解、通俗易懂地理解这个新…