当前位置: 首页 > backend >正文

P4568 [JLOI2011] 飞行路线

P4568 [JLOI2011] 飞行路线 - 洛谷

题目描述

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

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

输入格式

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

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

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

输出格式

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

输入输出样例

输入 #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% 的数据,2≤n≤50,1≤m≤300,k=0。
  • 对于 50% 的数据,2≤n≤600,1≤m≤6×103,0≤k≤1。
  • 对于 100% 的数据,2≤n≤104,1≤m≤5×104,0≤k≤10,0≤s,t,a,b<n,a=b ,0≤c≤106。

代码:
 

#include <bits/stdc++.h>
using namespace std;
using PII = pair<int,int>;
struct Edge
{int to, next, cost;
} edge[2500001];int cnt, head[110005];
int dis[110005];
bool vis[110005];void add_edge(int u, int v, int c = 0)
{edge[++cnt] = (Edge){v, head[u], c};head[u] = cnt;
}void Dijkstra(int s)
{memset(dis, 0x3f, sizeof(dis));dis[s] = 0;priority_queue<PII, vector<PII>, greater<PII>> points;points.push(make_pair(0, s));while (!points.empty()){int u = points.top().second;points.pop();if (!vis[u]){vis[u] = 1;for (int i = head[u]; i; i = edge[i].next){int to = edge[i].to;if (dis[to] > dis[u] + edge[i].cost){dis[to] = dis[u] + edge[i].cost;points.push(make_pair(dis[to], to));}}}}
}int main()
{ios::sync_with_stdio(false);cin.tie(0);int n, m, k, s, t;cin >> n >> m >> k >> s >> t;int u, v, c;for (int i = 0; i < m; ++i){cin >> u >> v >> c;// 添加原始层的边add_edge(u, v, c);add_edge(v, u, c);// 为每个分层添加边(使用免费次数的情况)for (int j = 1; j <= k; ++j){// 从j-1层到j层的免费边add_edge(u + (j-1)*n, v + j*n);add_edge(v + (j-1)*n, u + j*n);// j层内的付费边add_edge(u + j*n, v + j*n, c);add_edge(v + j*n, u + j*n, c);}}// 处理终点的分层连接(确保能到达最终层)for (int i = 1; i <= k; ++i){add_edge(t + (i-1)*n, t + i*n);}Dijkstra(s);cout << dis[t + k*n] << endl;return 0;
}

http://www.xdnf.cn/news/17127.html

相关文章:

  • 全面解析 URL 重定向原理:从协议、实现到安全实践
  • Plant Biotechnol J(IF=10.5)|DAP-seq助力揭示葡萄白粉病抗性机制
  • 普通冷库如何升级物联网冷库?工业智能网关赋能冷链智能化转型
  • C 语言主控开发与显控开发能力体系及技术栈详解,STM32、QT、嵌入式、边缘系统显示
  • LINUX-文件查看技巧,重定向以及内容追加,man及echo的使用
  • Next.js 15 重磅发布:React 19 集成 + 性能革命,开发者必看新特性指南
  • Dokcer创建中间件环境
  • PHP MySQL Delete 操作详解
  • JSON、JSONObject、JSONArray详细介绍及其应用方式
  • TypeScript 元组类型精简知识点
  • mysql死锁的常用解决办法
  • 【面试场景题】电商秒杀系统的库存管理设计实战
  • 应急响应知识总结
  • centos KVM
  • git 清理submodule
  • Webpack核心技能:Webpack安装配置与模块化
  • 【YOLOv8改进 - C2f融合】C2f融合DBlock(Decoder Block):解码器块,去模糊和提升图像清晰度
  • C语言中的进程、线程与进程间通信详解
  • 前端UI组件库
  • XXL-JOB快速入门
  • 【数据分享】西藏土壤类型数据库
  • imx6ull-驱动开发篇11——gpio子系统
  • 大模型客户端工具如Cherry Studio,Cursor 配置mcp服务,容易踩的坑,总结
  • 力扣经典算法篇-44-组合总和(回溯问题)
  • 进程管理块(PCB):操作系统进程管理的核心数据结构
  • NineData 新增支持 AWS ElastiCache 复制链路
  • 开疆智能ModbusTCP转Profinet网关连接安川YRC1000机器人配置案例
  • Effective C++ 条款25:考虑写出一个不抛异常的swap函数
  • 每日任务day0806:小小勇者成长记之收获日
  • NAT转化