P4568 [JLOI2011]飞行路线 - 分层图最短路
新博客地址:https://gyrojeff.top,欢迎访问!
本文为博客自动同步文章,为了更好的阅读体验,建议您移步至我的博客👇
本文标题:P4568 [JLOI2011]飞行路线 - 分层图最短路
文章作者:gyro永不抽风
发布时间:2020年09月18日 - 17:09
最后更新:2020年09月19日 - 19:09
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 转载请保留原文链接及作者!
题目
题目描述
Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在nn个城市设有业务,设这些城市分别标记为 到 ,一共有 种航线,每种航线连接两个城市,并且航线有一定的价格。
Alice 和 Bob 现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空公司对他们这次旅行也推出优惠,他们可以免费在最多 种航线上搭乘飞机。那么 Alice 和 Bob 这次出行最少花费多少?
输入格式
第一行三个整数 ,分别表示城市数,航线数和免费乘坐次数。
接下来一行两个整数 ,分别表示他们出行的起点城市编号和终点城市编号。
接下来 行,每行三个整数,表示存在一种航线,能从城市 到达城市 ,或从城市 到达城市 ,价格为 。
输出格式
输出一行一个整数,为最少花费。
输入输出样例
输入 #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
说明/提示
数据规模与约定
对于 的数据,。
对于 的数据,。
对于 的数据,。
另外存在一组 hack 数据。
题解
由于可以有$k$次免费,这里构建分层图:
- 有$k+1$层完全一样的图
- 每条边在层与层之间单向连接,但是费用为0
那么这样构建的图的第$i$层的$t$点就是免费了$i - 1$次的最小费用。
方程:
$$ \text {ans} = \min _ {0 \leq i \leq k} \text {dis} [t_i] $$
常见问题
- 如何防止从下面的层去上面?单向
- 如何建图?思考一下OpenCV当中的图像,其实他们的内存地址是连续的,所以我们可以把他们放在一个一维数组当中,只不过开了$n\times k$个点罢了。
图片(Ref @SuperJvRuo)
代码
1 |
|