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

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

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

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

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

输出格式
输出一行一个整数,为最少花费。
输入样例
5 6 1
0 4
0 1 5
1 2 5
2 3 5
3 4 5
2 3 3
0 2 100
输出样例
8

分析:
分层图最短路:有 k次零代价通过一条路径,求总的最小花费。
我们可以把一个点拆成k+1个点,每个新结点代表使用不同次数免费通行后到达的原图结点。
这完全可以用一个结构体维护,然后跑最短路即可。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const int N=2e5+5;
int n,m,k,S,T,idx;
int h[N],to[N],w[N],ne[N],vis[N][12],d[N][12];//d[i][j]是到i点使用j次免费的最小花费
struct node{int no,dis,cnt;//cnt记录到达这个点使用的免费次数node(){}node(int no,int dis,int cnt):no(no),dis(dis),cnt(cnt){}//dis小的先出 bool operator < (const node & t)const{return dis>t.dis; }
};
//链式前向星
void add(int x,int y,int z){to[idx]=y,w[idx]=z,ne[idx]=h[x],h[x]=idx++;to[idx]=x,w[idx]=z,ne[idx]=h[y],h[y]=idx++;
}
void dijkstra(int s){priority_queue<node>pq;memset(d,0x3f,sizeof d);d[s][0]=0;pq.push(node(s,0,0));while(pq.size()){node t=pq.top();pq.pop();int no=t.no,dis=t.dis,num=t.cnt;//访问过的不再入队 if(vis[no][num]) continue;vis[no][num]=1;for(int i=h[no];~i;i=ne[i]){int v=to[i],ww=w[i];//可以免费通过 if(num<k&&d[v][num+1]>d[no][num]){d[v][num+1]=d[no][num];//更新pq.push(node(v,d[v][num+1],num+1)); }//不可以免费通行//注意:这里为什么不加else,因为no这个点可以不使用免费通行 if(d[v][num]>d[no][num]+ww){d[v][num]=d[no][num]+ww;//更新pq.push(node(v,d[v][num],num)); }}}
}
int main(){cin>>n>>m>>k>>S>>T;memset(h,-1,sizeof h);while(m--){int a,b,c;cin>>a>>b>>c;add(a,b,c);}dijkstra(S);int ans=0x3f3f3f3f;//到终点使用0-k次免费的最小值 for(int i=0;i<=k;i++)ans=min(ans,d[T][i]);cout<<ans; return 0;
}

[JLOI2011]飞行路线相关推荐

  1. P4568 [JLOI2011]飞行路线

    P4568 [JLOI2011]飞行路线 Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1 ...

  2. bzoj2763 [JLOI2011]飞行路线

    2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3216  Solved: 1230 [Submit][St ...

  3. 洛谷P4568 [JLOI2011] 飞行路线 题解

    洛谷P4568 [JLOI2011] 飞行路线 题解 题目链接:P4568 [JLOI2011] 飞行路线 题意: Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公 ...

  4. 洛谷 P4568 [JLOI2011] 飞行路线(分层图最短路)

    [JLOI2011] 飞行路线 题目描述 Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在 n n n 个城市设有业务,设这些城市分别标记为 0 0 0 到 ...

  5. JLOI2011 飞行路线

    洛谷 BZOJ 分析 经典的分层最短路题(我不会). 建 \(k+1\) 层图,跑一遍最短路,找到 \(dis[i]\) 最小的一个. 代码 #include <queue> #inclu ...

  6. P4568 [JLOI2011]飞行路线 P2939 [USACO09FEB]改造路Revamping Trails

    分层图最短路系列题目 分层图最短路的题目有一个非常容易看得出的把戏:让k条边免费. 对于能让\(k\)条边免费的数据,我们开\(k+1\)层图.每一层图内部正常连点,不同的是前一层的图的起点连一条权值 ...

  7. 洛谷 4568 [JLOI2011] 飞行路线

    题目戳这里 一句话题意: 有n个点,m条边的有向图,最多可以把k条边变为0,求从起点到终点最短距离. Solution 首先看到这题目,感觉贼难,看起来像DP,貌似也有大佬这么做,但鉴于本蒟蒻思维能力 ...

  8. 洛谷 - P4568 [JLOI2011]飞行路线(分层图最短路)

    题目链接:点击查看 题目大意:给出一张图,每条边都有权值,现在要求从点st到达点ed,沿途中可以让k条边的边权免费,现在求最短路 题目分析:分层图经典模板问题,直接套板子就行了,最后记得对于数组d的每 ...

  9. bzoj 2763 [JLOI2011]飞行路线——分层图

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 分层图两种方法的练习. 1.把图分成k+1层,本层去上面一层的边免费.但空间时间都不算 ...

最新文章

  1. 行内标签(最常用的:a标签、img标签、span标签)
  2. php提交字段打印,在隱藏的表單字段中提交的JSON編碼的PHP數組 - 在提交表單的頁面中打印時會產生奇怪的輸出...
  3. Linux-SAMBA服务器的配置
  4. 建立Microsoft SQL Server 2005数据仓库
  5. Coursera课程Python for everyone:chapter4
  6. 加固前奏2-替换application
  7. ElementUI中el-upload怎样上传文件并且传递额外参数给Springboot后台进行接收
  8. 【Python 2 到 3 系列】 print 是函数
  9. Python词云学习之旅
  10. 中的数组怎么转成结构体_PLC知识,什么是数组和结构体?
  11. 一加8T真机渲染图泄露:后置四摄+双闪光灯
  12. JavaScript命名冲突不可避免?
  13. laravel 数据填充
  14. mybatis动态SQL配置文件
  15. numpy—np.random.multivariate_normal
  16. GreenDao的学习和使用
  17. 彪悍晨读 | 每天价值投资常识
  18. 医院计算机系统日常维护记录表,医院计算机信息管理系统的应用及维护
  19. 网易2019实习生招聘编程题解答
  20. 设备管理器出现“未知USB设备”同时蓝牙不可用的解决方法

热门文章

  1. P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold(加强版)(贪心+hash哈希)
  2. input框选中时如何不出灰框_如何建立学习目标:这个SMART原则,你要了解,家长看懂教给孩子...
  3. Python 10 MySQL数据库(一)
  4. 深入理解Presto(1) : Presto的架构
  5. Deepin 下安装 Docker
  6. leetCode 46. Permutations 回溯问题 | Medium
  7. activiti部署、执行,完成简单示例
  8. dedecms发布文章提示标题不能为空怎么办
  9. spring 下载地址
  10. Win32开发之Format MessageBox 详解