传送门

因为到某一没有限速的路径速度会有不同的可能,所以直接用 dis[i][j] 表示到第 i 个点速度为 j 时的最短时间,然后跑spfa。

——代码

  1. #include <queue>
  2. #include <cstdio>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. const int MAXN = ;
  8. int n, m, d, cnt;
  9. int head[MAXN], to[MAXN * MAXN], next[MAXN * MAXN], spd[MAXN * MAXN], lon[MAXN * MAXN], pr[MAXN][], ps[MAXN][];
  10. double dis[MAXN][], ans = ;
  11. bool vis[MAXN][];
  12. queue < pair <int, int> > q;
  13. pair <int, int> x;
  14.  
  15. inline void add(int x, int y, int v, int l)
  16. {
  17. to[cnt] = y;
  18. spd[cnt] = v;
  19. lon[cnt] = l;
  20. next[cnt] = head[x];
  21. head[x] = cnt++;
  22. }
  23.  
  24. inline void spfa()
  25. {
  26. int i, j, u, v, s, p;
  27. memset(dis, , sizeof(dis));
  28. q.push(make_pair(, ));
  29. dis[][] = ;
  30. while(!q.empty())
  31. {
  32. x = q.front();
  33. q.pop();
  34. u = x.first;
  35. s = x.second;
  36. vis[u][s] = ;
  37. for(i = head[u]; i != -; i = next[i])
  38. {
  39. v = to[i];
  40. p = spd[i] == ? s : spd[i];
  41. if(dis[v][p] > dis[u][s] + 1.0 * lon[i] / p)
  42. {
  43. dis[v][p] = dis[u][s] + 1.0 * lon[i] / p;
  44. pr[v][p] = u;
  45. ps[v][p] = s;
  46. if(!vis[v][p])
  47. {
  48. vis[v][p] = ;
  49. q.push(make_pair(v, p));
  50. }
  51. }
  52. }
  53. }
  54. }
  55.  
  56. inline void print(int u, int pos)
  57. {
  58. if(pr[u][pos] != -) print(pr[u][pos], ps[u][pos]);
  59. printf("%d ", u);
  60. }
  61.  
  62. int main()
  63. {
  64. int i, x, y, v, l, pos;
  65. scanf("%d %d %d", &n, &m, &d);
  66. memset(pr, -, sizeof(pr));
  67. memset(ps, -, sizeof(ps));
  68. memset(head, -, sizeof(head));
  69. for(i = ; i <= m; i++)
  70. {
  71. scanf("%d %d %d %d", &x, &y, &v, &l);
  72. add(x, y, v, l);
  73. }
  74. spfa();
  75. for(i = ; i <= ; i++)
  76. if(ans > dis[d][i])
  77. ans = dis[d][i], pos = i;
  78. print(d, pos);
  79. return ;
  80. }

[luoguP1266] 速度限制(spfa)的更多相关文章

  1. P1266 速度限制(分层图spfa)

    P1266 速度限制 题目描述 在这个繁忙的社会中,我们往往不再去选择最短的道路,而是选择最快的路线.开车时每条道路的限速成为最关键的问题.不幸的是,有一些限速的标志丢失了,因此你无法得知应该开多快. ...

  2. 洛谷 P1266 速度限制 最短路+SPFA算法

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1266 速度限制 题目描述 在这个繁忙的社会中,我们往往不 ...

  3. 洛谷P1266速度限制

    传送门啦 看起来是一个最短路问题,但是引入了速度限制,就要写一下二维最短路了. $ dis[i][j] $ :表示到i这个点,速度为j的最短时间. #include <iostream> ...

  4. 洛谷 P1266 速度限制

    题目描述 在这个繁忙的社会中,我们往往不再去选择最短的道路,而是选择最快的路线.开车时每条道路的限速成为最关键的问题.不幸的是,有一些限速的标志丢失了,因此你无法得知应该开多快.一种可以辩解的解决方案 ...

  5. P1266 速度限制

    P1266 速度限制 第一次接触这种分层spfa 类似于dp 个人理解 #include<cstdio> #include<iostream> #include<algo ...

  6. 【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa

    3627: [JLOI2014]路径规划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 186  Solved: 70[Submit][Status] ...

  7. POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)

    传送门 Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 46727   Acce ...

  8. sgu 240 Runaway (spfa)

    题意:N点M边的无向图,边上有线性不下降的温度,给固定入口S,有E个出口.逃出去,使最大承受温度最小.输出该温度,若该温度超过H,输出-1. 羞涩的题意 显然N*H的复杂度dp[n][h]表示到达n最 ...

  9. spfa模板

    通过stl的queue实现的spfa(vector实现邻接表存图) 本模板没有考虑存在两点不连通的情况 如果需要判断则需要用到并查集或者遍历整个邻接表 #include<iostream> ...

随机推荐

  1. python_函数嵌套(4)

    第1章 名称空间 1.1 定义 1.2 变量运行流程 1.3 临时名称空间 1.4 python三种名称空间 第2章 作用域 2.1 作用域分类 2.2 加载顺序 2.3 取值顺序 函数嵌套 2.4 ...

  2. php的iconv函数中utf8与utf-8的差异

    开发中遇到一个奇怪的问题:报错如下: iconv() [<a href='function.iconv'>function.iconv</a>] : Wrong charset ...

  3. mongoDB学习初步总结

    What? 最受欢迎的非关系型数据库之一.面向文档的数据库,在存储乎数据方面与关系型数据库有着本质的区别. Why? 简单易用 对多变的业务需求,适应性强于SQL型DB 性能 复制 索引 分片 丰富的 ...

  4. CENTOS6.4上KVM虚拟机环境搭建

    CENTOS6.4上KVM虚拟机环境搭建   关键词: KVM,虚拟机,windows7, VNC, 桥接网络,br0, SCSI, IDE   环境: host: CENTOS6.4 guest: ...

  5. Long time no blogging

    It is a long time before I posted the last blog on myspace and seems that all of my blogs/documents ...

  6. iOS开发-Runtime详解

    iOS开发-Runtime详解 简介 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的.比如: [recei ...

  7. ie 导出不行,不兼容问题,或只出现后缀文件无法识别

    // 下载模板 @RequestMapping("/download") @ResponseBody public ResponseEntity<byte[]> dow ...

  8. JDO

    JDO 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! JDO(Java Data Object )是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象 ...

  9. uva1228 Integer Transmission

    这道题思维很灵活.也有点套路的意思. 首先规定0,1分别按照原来的顺序接收,只是01换位.这样简化了思维.(否则并不会有更优结果它.,比较好想)最大值和最小值可以贪心得到.那么接下来就是给定一个整数P ...

  10. codeforces 235 B lets play osu!

    cf235B 一道有意思的题.(据说是美少女(伪)计算机科学家出的,hh) 根据题目要求,就是求ni^2的和. 而n^2=n*(n-1)+n; n*(n-1)=C(n,2)*2: 所以∑ai^2=∑a ...