2763: [JLOI2011]飞行路线

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 1694  Solved: 635
[Submit][Status][Discuss]

Description

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

Input

数据的第一行有三个整数,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)
 

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

HINT

对于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.

Source

 题解:
分层图+SPFA
分层图思想详见   IOI2004 国家集训队论文 肖天 
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define MAXN 10020
  4. #define INF 1e9
  5. struct node
  6. {
  7. int begin,end,value,next;
  8. }edge[];
  9. int cnt,Head[MAXN],q[MAXN],pay[MAXN][],n,k;
  10. bool vis[MAXN];
  11. void addedge(int bb,int ee,int vv)
  12. {
  13. edge[++cnt].begin=bb;edge[cnt].end=ee;edge[cnt].value=vv;edge[cnt].next=Head[bb];Head[bb]=cnt;
  14. }
  15. void addedge1(int bb,int ee,int vv)
  16. {
  17. addedge(bb,ee,vv);addedge(ee,bb,vv);
  18. }
  19. int read()
  20. {
  21. int s=,fh=;char ch=getchar();
  22. while(ch<''||ch>''){if(ch=='-')fh=-;ch=getchar();}
  23. while(ch>=''&&ch<=''){s=s*+(ch-'');ch=getchar();}
  24. return s*fh;
  25. }
  26. void SPFA(int bb,int ee)
  27. {
  28. int i,j,u,v,tmp,head,tail;
  29. memset(pay,,sizeof(pay));//pay[i][j]为到i点使用j次免费的最小花费.
  30. for(i=;i<=n;i++)
  31. {
  32. for(j=-;j<=k;j++)pay[i][j]=INF;
  33. }
  34. for(j=;j<=k;j++)pay[bb][j]=;
  35. head=;tail=;q[tail]=bb;
  36. memset(vis,false,sizeof(vis));vis[bb]=true;
  37. while(head!=tail)
  38. {
  39. head++;if(head==)head=;
  40. u=q[head];
  41. for(i=Head[u];i!=-;i=edge[i].next)
  42. {
  43. v=edge[i].end;
  44. for(j=;j<=k;j++)
  45. {
  46. tmp=min(pay[u][j]+edge[i].value,pay[u][j-]);
  47. if(pay[v][j]>tmp)
  48. {
  49. pay[v][j]=tmp;
  50. if(vis[v]==false)
  51. {
  52. vis[v]=true;
  53. tail++;if(tail==)tail=;
  54. q[tail]=v;
  55. }
  56. }
  57. }
  58. }
  59. vis[u]=false;
  60. }
  61. }
  62. int main()
  63. {
  64. int m,s,t,i,a,b,c,mn;
  65. n=read();m=read();k=read();
  66. s=read();t=read();s++;t++;
  67. memset(Head,-,sizeof(Head));cnt=;
  68. for(i=;i<=m;i++)
  69. {
  70. a=read();b=read();c=read();
  71. a++;b++;
  72. addedge1(a,b,c);
  73. }
  74. SPFA(s,t);
  75. mn=INF;
  76. for(i=;i<=k;i++)mn=min(mn,pay[t][i]);
  77. printf("%d",mn);
  78. fclose(stdin);
  79. fclose(stdout);
  80. return ;
  81. }

Bzoj 2763: [JLOI2011]飞行路线 拆点,分层图,最短路,SPFA的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. bzoj 2763: [JLOI2011]飞行路线【分层图+spfa】

    为什么早年的题总是从0开始标号啊--又zz了一次WA 分层图的题只有这一个套路吧,建分层图,然后优化时间是分层跑spfa然后层与层之间单独跑即可 #include<iostream> #i ...

  8. bzoj 2763: [JLOI2011]飞行路线

    #include<cstdio> #include<cstring> #include<iostream> #include<queue> #defin ...

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

    题目链接 n个点m条路, 每条路有权值,  给出起点和终点, 求一条路使得权值最小.可以使路过的路中, k条路的权值忽略. 其实就是多一维, 具体看代码 #include<bits/stdc++ ...

随机推荐

  1. 初学HTML5系列二:HTML5新增的事件属性

    Window事件属性: 属性 值 描述 onafterprint  script 文档打印之后运行的脚本. 属性发生于用户设置页面打印并且打印对话框已出现之后. onbeforeprint  scri ...

  2. SQL Server 2008文件与文件组的关系

    此文章主要向大家讲述的是SQL Server 2008文件与文件组,其中包括文件和文件组的含义与关系,文件.文件组在实践应用中经常出现的问题,查询文件组和文件语句与MSDN官方解释等相关内容的介绍. ...

  3. linux du 显示目录下的各个子目录的大小

    use  command du  display estimate file space usage size of subdirectories [oracle@ahjcyl-db backup]$ ...

  4. C# 之【线程与进程】

    1.  引言 先来个比喻手法: 如果把上课的过程比作进程,那么每个学生就是一个线程,他们共享教室,即线程共享进程的内存空间.每一个时刻,只能一个学生问老师问题,老师回答完毕,轮到下一个.即线程在一个时 ...

  5. 一看就懂ReactJS

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...

  6. [转载] CMake Official Tutorial——教程还是官方的好

    CMake官方教程传送门:https://cmake.org/cmake-tutorial/ 以下的内容跟官方教程基本一致,少数地方根据自己的测试有所改动: A Basic Starting Poin ...

  7. js 中对象--属性相关操作

    查询属性: 可以用 对象.属性 来查询属性和属性方法               或者                    对象[“属性”]  来查询属性和属性方法 演示代码: <script ...

  8. JS判断浏览器类型以及版本号

    <script type="text/javascript">        (function(){            window.nav={};       ...

  9. [CSS]position定位

    CSS position 属性 通过使用 position 属性,我们可以选择 4 种不同类型的定位,这会影响元素框生成的方式. position 属性值的含义: static 元素框正常生成.块级元 ...

  10. quick-x 计时器的写法

    local scheduler = require("framework.scheduler") --计时器 function MainScene:recoderTime() pr ...