*题目描述:
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.

*题解:
有k次免票的最短路。
好像直接spfa多计一个当前免票多少次好像就过了,据说有一种神奇的分层图的做法?

*代码:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <queue>
  6. #ifdef WIN32
  7. #define LL "%I64d"
  8. #else
  9. #define LL "%lld"
  10. #endif
  11. #ifdef CT
  12. #define debug(...) printf(__VA_ARGS__)
  13. #define setfile()
  14. #else
  15. #define debug(...)
  16. #define filename ""
  17. #define setfile() freopen(filename".in", "r", stdin); freopen(filename".out", "w", stdout)
  18. #endif
  19. #define R register
  20. #define getc() (S == T && (T = (S = B) + fread(B, 1, 1 << 15, stdin), S == T) ? EOF : *S++)
  21. #define dmax(_a, _b) ((_a) > (_b) ? (_a) : (_b))
  22. #define dmin(_a, _b) ((_a) < (_b) ? (_a) : (_b))
  23. #define cmax(_a, _b) (_a < (_b) ? _a = (_b) : 0)
  24. #define cmin(_a, _b) (_a > (_b) ? _a = (_b) : 0)
  25. #define cabs(_x) ((_x) < 0 ? (- (_x)) : (_x))
  26. char B[1 << 15], *S = B, *T = B;
  27. inline int F()
  28. {
  29. R char ch; R int cnt = 0; R bool minus = 0;
  30. while (ch = getc(), (ch < '0' || ch > '9') && ch != '-') ;
  31. ch == '-' ? minus = 1 : cnt = ch - '0';
  32. while (ch = getc(), ch >= '0' && ch <= '9') cnt = cnt * 10 + ch - '0';
  33. return minus ? -cnt : cnt;
  34. }
  35. #define maxn 10010
  36. #define maxm 100010
  37. #define P std::pair<int, int>
  38. #define mkp std::make_pair
  39. #define fir first
  40. #define sec second
  41. int d[maxn][20];
  42. struct Edge
  43. {
  44. Edge *next;
  45. int to, w;
  46. }*last[maxn], e[maxm], *ecnt = e;
  47. inline void link(R int a, R int b, R int w)
  48. {
  49. *++ecnt = (Edge) {last[a], b, w}; last[a] = ecnt;
  50. *++ecnt = (Edge) {last[b], a, w}; last[b] = ecnt;
  51. }
  52. std::queue<P> q;
  53. bool inq[maxn][20];
  54. int main()
  55. {
  56. // setfile();
  57. R int n = F(), m = F(), k = F(), s = F(), t = F();
  58. for (R int i = 1; i <= m; ++i)
  59. {
  60. R int a = F(), b = F(), w = F();
  61. link(a, b, w);
  62. }
  63. memset(d, 63, sizeof (d));
  64. q.push(mkp(s, 0)); d[s][0] = 0;
  65. while (!q.empty())
  66. {
  67. R P now = q.front(); q.pop();
  68. R int pos = now.fir, times = now.sec;
  69. inq[pos][times] = 0;
  70. for (R Edge *iter = last[pos]; iter; iter = iter -> next)
  71. {
  72. if (d[iter -> to][times] > d[pos][times] + iter -> w)
  73. {
  74. d[iter -> to][times] = d[pos][times] + iter -> w;
  75. if (!inq[iter -> to][times])
  76. {
  77. q.push(mkp(iter -> to, times));
  78. inq[iter -> to][times] = 1;
  79. }
  80. }
  81. if (times < k && d[iter -> to][times + 1] > d[pos][times])
  82. {
  83. d[iter -> to][times + 1] = d[pos][times];
  84. if (!inq[iter -> to][times + 1])
  85. {
  86. q.push(mkp(iter -> to, times + 1));
  87. inq[iter -> to][times + 1];
  88. }
  89. }
  90. }
  91. }
  92. R int ans = 0x7fffffff;
  93. for (R int i = 0; i <= k; ++i) cmin(ans, d[t][i]);
  94. printf("%d\n", ans );
  95. return 0;
  96. }

【bzoj2763】[JLOI2011]飞行路线的更多相关文章

  1. BZOJ2763 JLOI2011 飞行路线 【最短路+DP】

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

  2. BZOJ2763[JLOI2011]飞行路线 [分层图最短路]

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

  3. bzoj千题计划226:bzoj2763: [JLOI2011]飞行路线

    http://www.lydsy.com/JudgeOnline/problem.php?id=2763 这也算分层图最短路? dp[i][j]到城市i,还剩k次免费次数的最短路 #include&l ...

  4. bzoj2763: [JLOI2011]飞行路线(分层图spfa)

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

  5. BZOJ2763 [JLOI2011]飞行路线(SPFA + DP)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=2763 Description Alice和Bob现在要乘飞机旅行,他们选择了一家 ...

  6. Bzoj2763 [JLOI2011]飞行路线

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2651  Solved: 1004 Description Alice和Bob现在要乘飞机旅行,他们选 ...

  7. bzoj2763: [JLOI2011]飞行路线 分层图+dij+heap

    分析:d[i][j]代表从起点到点j,用了i次免费机会,那就可以最短路求解 #include <stdio.h> #include <iostream> #include &l ...

  8. [luogu4568][bzoj2763][JLOI2011]飞行路线

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

  9. bzoj2763: [JLOI2011]飞行路线 最短路

    题意:求最多可以有k条路免费的最短路 题解:用dis[x][k]表示从s开始用了k次免费机会到x的最短路,然后dij跑的时候优先队列里多维护一个k就好了 /********************** ...

  10. BZOJ2763: [JLOI2011]飞行路线(分层图 最短路)

    题意 题目链接 Sol 分层图+最短路 建\(k+1\)层图,对于边\((u, v, w)\),首先在本层内连边权为\(w\)的无向边,再各向下一层对应的节点连边权为\(0\)的有向边 如果是取最大最 ...

随机推荐

  1. 使用UI Automation实现自动化测试--1-4

    Introduction UI Automation是Microsoft .NET 3.0框架下提供的一种用于自动化测试的技术,是在MSAA基础上建立的,MSAA就是Microsoft Active ...

  2. Java第六周实验+总结

    一.实验目的 (1)掌握类的继承 1.子类继承父类中非private的成员变量和成员方法,同时,注意构造方法不能被子类继承. 2.定义类时若缺省extends关键字,则所定义的类为java.lang. ...

  3. Elasticsearch-数据的存储、搜索(干货)

    ES-深入功能ES中数据是如何组织的?逻辑设计:用于索引和搜索的基本单位是文档,可以将其认为是关系数据库里的一行.文档以类型来分组,类型包含若干文档,类似表格包含若干行.最终,一个或多个类型存在于同一 ...

  4. PostgreSQL创建只读账户

    目前PostgreSQL并不能像MySQL一样直接对某个数据库赋予只读权限,现实中有研发需要新建一个用户然后赋予对某个数据库只读权限. 举例说明如何创建 用edbstore用户连接edbstore数据 ...

  5. pycharm中ctrl + C复制, ctrl+A全选等快捷键失效

    原因是:在安装pycharm的时候也同时安装了vim插件,需要在settings  - > vim Emulation里将相关的handler改成 IDE

  6. mysql修改max_allowed_packet数据包最大值

    在windows环境下!!!! 1.找到my.inc文件,不是你的安装目录路径,是C:\ProgramData\MySQL\MySQL Server 5.7这个路径,注意 ProgramData 文件 ...

  7. 【6.18校内test】T3细胞分裂

    尽管T1T2很简单,但还是阻止不了我T3wa一片 细胞分裂[题目链接] xcg同学有一个80pts的代码 他说他的代码和我的很像,可惜我比较笨,只有30pts 其实这道题考场上是想到要分解质因数了,然 ...

  8. git reset –mixed –soft –hard命令解释。

    直接看官方的解释. 其中HEAD代表版本库,index代表暂存区,另外还有一个我们增删改代码的工作区.所以官方解释翻译过来就是: --hard : 回退版本库,暂存区,工作区.(因此我们修改过的代码就 ...

  9. 元素定位--firebug安装

    1.火狐浏览器调试工具firebug插件的安装 打开浏览器---添加组件---搜索firebug

  10. 在Asp.net core使用配置Json创建动态目录树

    一.前言 使用动态目录树可以使左边栏中的目录更加灵活,本文介绍如何将目录保存在json配置文件中,再读取出来经过处理后生成目录树. 二.数据结构 1. TreeMenuNode类名 将TreeMenu ...