题目描述

Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格。Alice和Bob现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空公司对他们这次旅行也推出优惠,他们可以免费在最多k种航线上搭乘飞机。那么Alice和Bob这次出行最少花费多少?

输入

数据的第一行有三个整数,n,m,k,分别表示城市数,航线数和免费乘坐次数。
第二行有两个整数,s,t,分别表示他们出行的起点城市编号和终点城市编号。(0<=s,t<n)
接下来有m行,每行三个整数,a,b,c,表示存在一种航线,能从城市a到达城市b,或从城市b到达城市a,价格为c。(0<=a,b<n,a与b不相等,0<=c<=1000)
 

输出

 
只有一行,包含一个整数,为最少花费。

样例输入

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

样例输出

8

提示

对于30%的数据,2<=n<=50,1<=m<=300,k=0;

对于50%的数据,2<=n<=600,1<=m<=6000,0<=k<=1;

对于100%的数据,2<=n<=10000,1<=m<=50000,0<=k<=10.

  1. /*
  2. 分层图最短路
  3. 建k+1层图,对于每条边都和它下一层图建一条边权为0的边,
  4. 然后进行优先队列优化的Dij
  5. */
  6. #include<cstdio>
  7. #include<iostream>
  8. #include<queue>
  9. #include<vector>
  10. #include<cstring>
  11. #define mk make_pair
  12. #define pa pair<int,int>
  13. #define M 2000010
  14. using namespace std;
  15. int n,m,k,s,t,num,head[M],dis[M],c[M];
  16. int x[M],y[M],z[M],ans=0xfffffff;
  17. priority_queue<pa,vector<pa>,greater<pa> >q;
  18. bool f[M];
  19. struct node
  20. {
  21. int u,v,pre,t;
  22. };node e[M];
  23. void add(int x,int y,int z)
  24. {
  25. for(int i=head[x];i;i=e[i].pre)
  26. if(e[i].v==y)
  27. {
  28. e[i].t=min(e[i].t,z);
  29. return;
  30. }
  31. num++;
  32. e[num].u=x;
  33. e[num].v=y;
  34. e[num].t=z;
  35. e[num].pre=head[x];
  36. head[x]=num;
  37. }
  38. void Dij(int x)
  39. {
  40. memset(dis,/,sizeof(dis));
  41. dis[x]=;q.push(mk(,x));
  42. while(!q.empty())
  43. {
  44. int d=q.top().first;
  45. int k=q.top().second;
  46. q.pop();
  47. if(f[k])continue;f[k]=;
  48. for(int i=head[k];i;i=e[i].pre)
  49. {
  50. int v=e[i].v;
  51. if(dis[v]>dis[k]+e[i].t)
  52. {
  53. dis[v]=dis[k]+e[i].t;
  54. q.push(mk(dis[v],v));
  55. }
  56. }
  57. }
  58. }
  59. int main()
  60. {
  61. scanf("%d%d%d%d%d",&n,&m,&k,&s,&t);
  62. s++;t++;n=n*(k+);
  63. for(int i=;i<=m;i++)
  64. scanf("%d%d%d",&x[i],&y[i],&z[i]),
  65. x[i]++,y[i]++;
  66. for(int i=;i<=m;i++)
  67. for(int j=;j<=k+;j++)
  68. {
  69. add((x[i]-)*(k+)+j,(y[i]-)*(k+)+j,z[i]);
  70. add((y[i]-)*(k+)+j,(x[i]-)*(k+)+j,z[i]);
  71. if(j<=k)
  72. {
  73. add((x[i]-)*(k+)+j,(y[i]-)*(k+)+j+,);
  74. add((y[i]-)*(k+)+j,(x[i]-)*(k+)+j+,);
  75. }
  76. }
  77. Dij((s-)*(k+)+);
  78. for(int j=;j<=k+;j++)
  79. ans=min(ans,dis[(t-)*(k+)+j]);
  80. printf("%d",ans);
  81. return ;
  82. }

飞行路线(BZOJ 2763)的更多相关文章

  1. ACM-ICPC 2018 南京赛区网络预赛 L && BZOJ 2763 分层最短路

    https://nanti.jisuanke.com/t/31001 题意 可以把k条边的权值变为0,求s到t的最短路 解析  分层最短路  我们建立k+1层图 层与层之间边权为0,i 向 i+1层转 ...

  2. 分层图+最短路算法 BZOJ 2763: [JLOI2011]飞行路线

    2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  Memory Limit: 128 MB Description Alice和Bob现在要乘飞机旅行,他们选择了一家相 ...

  3. BZOJ 2763: [JLOI2011]飞行路线 最短路

    2763: [JLOI2011]飞行路线 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  4. Bzoj 2763: [JLOI2011]飞行路线 dijkstra,堆,最短路,分层图

    2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1728  Solved: 649[Submit][Statu ...

  5. Bzoj 2763: [JLOI2011]飞行路线 拆点,分层图,最短路,SPFA

    2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1694  Solved: 635[Submit][Statu ...

  6. [BZOJ 2763][JLOI 2011] 飞行路线

    2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3203  Solved: 1223[Submit][Stat ...

  7. bzoj 2763: [JLOI2011]飞行路线 -- 分层图最短路

    2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  Memory Limit: 128 MB Description Alice和Bob现在要乘飞机旅行,他们选择了一家相 ...

  8. BZOJ 2763: [JLOI2011]飞行路线 【分层图模板】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 2763: [JLOI2011]飞行路线 Time Limit: 10 Sec  M ...

  9. BZOJ 2763: [JLOI2011]飞行路线 spfa dp

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2763 题解: d[x][kk]表示从s到x用了kk次免费机会的最少花费. 代码: #in ...

  10. BZOJ 2763 飞行路线 BFS分层

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2763 题目大意: Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司 ...

随机推荐

  1. HashMap,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法

    基础内容 容器就是一种装其他各种对象的器皿.java.util包 容器:Set, List, Map ,数组.只有这四种容器. Collection(集合) 一个一个往里装,Map 一对一对往里装. ...

  2. mongodb多条件查询总结

    根据两字段乘积过滤查询分页数据 db.cron.aggregate([{$project:{_id:,AppID:,result:{$add:["$endlottery",&quo ...

  3. [转载]ant和maven的区别

    Ant是软件构建工具,Maven的定位是软件项目管理和理解工具.Maven除了具备Ant的功能外,还增加了以下主要的功能: 1)使用Project Object Model来对软件项目管理: 2)内置 ...

  4. 年度精品 XP,32/64位Win7,32/64位Win10系统【电脑城版】

    随着Windows 10Build 10074 Insider Preview版发布,有理由相信,Win10离最终RTM阶段已经不远了.看来稍早前传闻的合作伙伴透露微软将在7月底正式发布Win10的消 ...

  5. 51nod 1067 Bash游戏 V2

    基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 有一堆石子共有N个.A B两个人轮流拿,A先拿.每次只能拿1,3,4颗,拿到最后1颗石子的人获胜.假设A B都非常聪 ...

  6. 深入理解Java的整型类型:如何实现2+2=5?

    先看下这段神奇的Java代码: public static void main(String[] args) throws Exception { doSomethingMagic(); System ...

  7. C#飞行棋总结

    以下是掷色子的一个代码,比较有代表性,里面的逻辑和内容都已注释,可通过注释了解这一方法的运作模式. public static void RowTouZi(int playerPos) //掷色子 { ...

  8. environ - 用户环境(变量)

    SYNOPSIS 总览 extern char **environ; DESCRIPTION 描述 变量 environ 指向的是一个叫 'environment'(环境)的字符串数组 (这个变量必须 ...

  9. tomcat https协议

    一.tomcat证书 JDK自带的keytool工具来生成证书 1. 在jdk的安装目录\bin\keytool.exe下打开keytool.exe 2. 在命令行中输入以下命令: keytool - ...

  10. easyui实现增删改查

    陈旧的开发模式 美工(ui工程师:出一个项目模型) java工程师:将原有的html转成jsp,动态展示数据 缺点: 客户需要调节前端的展示效果 解决:由美工去重新排版,重新选色. 前后端分离: 前端 ...