P4568 [JLOI2011]飞行路线
P4568 [JLOI2011]飞行路线
Description
Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格。
Alice和Bob现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空公司对他们这次旅行也推出优惠,他们可以免费在最多kk种航线上搭乘飞机。那么Alice和Bob这次出行最少花费多少?
Input
- 数据的第一行有三个整数,n,m,k,分别表示城市数,航线数和免费乘坐次数。
第二行有两个整数,s,t,分别表示他们出行的起点城市编号和终点城市编号。
接下来有m行,每行三个整数,a,b,c,表示存在一种航线,能从城市a到达城市b,或从城市b到达城市a,价格为c。
Output
- 只有一行,包含一个整数,为最少花费。
Sample Input
5 6 1
0 4
0 1 5
1 2 5
2 3 5
3 4 5
2 3 3
0 2 100
Sample Output
8
Data Size
- 对于100%的数据,2≤n≤10000,1≤m≤50000,0≤k≤10,0≤s,t<n,0≤a,b<n,a≠b,0≤c≤1000
题解:
- 分层图最短路。
- 观察数据范围,k特别小(<=10)。所以可以用拆点的思想,就是把一个点拆成k种情况:用1次机会到达的、用2次机会到达的...用k次机会到达的。这样所有的状态就变成了一个大图。在这个大图上面跑最短路即可。
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#define N 100005
#define M 1000005
using namespace std;struct Node
{int val, pos;friend bool operator < (Node x, Node y) {return x.val > y.val;}
};
struct E {int next, to, dis;} e[M];
int n, m, k, s, t, num, ans = 0x7fffffff;
int h[N], dis[N];
bool vis[N]; int read()
{int x = 0; char c = getchar();while(c < '0' || c > '9') c = getchar();while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = getchar();}return x;
}void add(int u, int v, int w)
{e[++num].next = h[u];e[num].to = v;e[num].dis = w;h[u] = num;
}void dijskra()
{memset(dis, 0x3f, sizeof(dis));priority_queue<Node> que;dis[s] = 0, que.push((Node){0, s});while(!que.empty()){int x = que.top().pos; que.pop();if(vis[x]) continue;vis[x] = 1;for(int i = h[x]; i != 0; i = e[i].next)if(dis[x] + e[i].dis < dis[e[i].to]){dis[e[i].to] = dis[x] + e[i].dis;if(!vis[e[i].to]) que.push((Node){dis[e[i].to], e[i].to});}}
}int main()
{cin >> n >> m >> k >> s >> t;s++, t++;for(int i = 1; i <= m; i++){int u = read() + 1, v = read() + 1, w = read();add(u, v, w), add(v, u, w);for(int j = 1; j <= k; j++){add(u + j * n, v + j * n, w);add(v + j * n, u + j * n, w);add(u + (j - 1) * n, v + j * n, 0);add(v + (j - 1) * n, u + j * n, 0);}}dijskra();for(int i = 0; i <= k; i++)ans = min(ans, dis[t + i * n]);cout << ans; return 0;
}
转载于:https://www.cnblogs.com/BigYellowDog/p/11216971.html
P4568 [JLOI2011]飞行路线相关推荐
- 洛谷P4568 [JLOI2011] 飞行路线 题解
洛谷P4568 [JLOI2011] 飞行路线 题解 题目链接:P4568 [JLOI2011] 飞行路线 题意: Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公 ...
- 洛谷 P4568 [JLOI2011] 飞行路线(分层图最短路)
[JLOI2011] 飞行路线 题目描述 Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在 n n n 个城市设有业务,设这些城市分别标记为 0 0 0 到 ...
- P4568 [JLOI2011]飞行路线 P2939 [USACO09FEB]改造路Revamping Trails
分层图最短路系列题目 分层图最短路的题目有一个非常容易看得出的把戏:让k条边免费. 对于能让\(k\)条边免费的数据,我们开\(k+1\)层图.每一层图内部正常连点,不同的是前一层的图的起点连一条权值 ...
- 洛谷 - P4568 [JLOI2011]飞行路线(分层图最短路)
题目链接:点击查看 题目大意:给出一张图,每条边都有权值,现在要求从点st到达点ed,沿途中可以让k条边的边权免费,现在求最短路 题目分析:分层图经典模板问题,直接套板子就行了,最后记得对于数组d的每 ...
- bzoj2763 [JLOI2011]飞行路线
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3216 Solved: 1230 [Submit][St ...
- luoguP4568 [JLOI2011]飞行路线
https://www.luogu.org/problemnew/show/P4568 题目中 k 的大小只有 10,我们可以考虑建立分层图跑最短路 相同层中 a -> b 的权值仍为 val, ...
- JLOI2011 飞行路线
洛谷 BZOJ 分析 经典的分层最短路题(我不会). 建 \(k+1\) 层图,跑一遍最短路,找到 \(dis[i]\) 最小的一个. 代码 #include <queue> #inclu ...
- [JLOI2011]飞行路线
题目描述 Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为 0 到 n-1,一共有 m 种航线,每种航线连接两个城市, ...
- 洛谷 4568 [JLOI2011] 飞行路线
题目戳这里 一句话题意: 有n个点,m条边的有向图,最多可以把k条边变为0,求从起点到终点最短距离. Solution 首先看到这题目,感觉贼难,看起来像DP,貌似也有大佬这么做,但鉴于本蒟蒻思维能力 ...
最新文章
- android studio下NDK开发
- CobaltStrike的使用
- 管理服务器一般的作用,管理服务器作用
- 什么是 Time to live TTL
- 对OIM Web(UI)层进行压力测试
- jquery.dataTables.min.js:62 Uncaught TypeError: Cannot read property ‘style‘ of undefined原因
- 技术动态 | 知识图谱从哪里来:实体关系抽取的现状与未来
- C/C++函数学习(6)容器分类
- SPOJ AMR12B 720
- Python 3 - 如何下载视图和保存证书
- 基于JAVA+Servlet+JSP+MYSQL的读者荐购系统
- PMP课程笔记:第6章 项目进度管理
- 华硕路由器无线打印服务器怎么开启,华硕ASUS路由器无线中继模式设置教程
- c++ 的interface
- 国内域名转入到AWS-Route53的操作实践经验分享
- Caporali HSK63A.H80.WE16
- 争对让望对思野葛对山栀注解_争对让,望对思的下一句是什么?
- 特征选择(一)-维数问题与类内距离
- L19-python核心编程-面向对象编程(day1、2)
- 不能用来修饰interface的有
热门文章
- Be a person
- Solution 24: 链表翻转
- 实现一个基于 SharePoint 2013 的 Timecard 应用(下)
- C++排序算法实现(更新中)
- 《OpenCV3编程入门》学习笔记7 图像变换(四 )仿射变换
- 网页如何与mysql服务器建立连接不上,html与mysql建立连接数据库
- 处理字典值是把字典放内存还是用sql处理_SQL索引及其底层实现
- 判定设备_盐雾腐蚀试验判定标准
- rn php,rn怎样在PHP的正则表达式中匹配到?
- c语言正数与负数相加_C语言数据基本类型(1)