Problem 2. drive
Input file: drive.in
Output file: drive.out
Time limit: 2 second
工头cky 最近开了一家贸易公司,开始经商。作为cky 的忠实小弟,jyb 当了cky 老总的司机。一天晚上,
cky 突然找到了一个新的客户,所以第二天一早要急着从成都去上海谈生意(设全国一共有n 个城市, 成都
编号为1,上海编号为n),城市之间有高速公路,每条高速公路都有一个最高限速和长度。cky 想:我应该
在今晚就告诉客户我最快多久能到上海,不然客户就可能先和别人谈生意了。所以他就让jyb 计算一下最快
多久能到。
jyb 作为一名经验丰富的老司机,看了一眼天气预报,天气预报说:全国范围内有一条高速公路第二天可能
下大雨(大雨天气的话,车速会下降75%),但坑爹的是居然不知道是哪一条,准确信息要第二天一早才知
道。现在jyb 拥有全国高速公路图,为了回答一个尽量早但又不失信于客户的时间,jyb 想请你帮帮忙。
ps: 虽然cky 很急,但是他还是告诫jyb 不能超速行驶。
第二天知道哪会下雨后,jyb 自然会作出正确的抉择。
迟到肯定就是失信于客户啦!
Input
第1 行,2 个整数n;m,表示城市数和高速公路数。
接下来m 行,每行4 个整数u; v; speed; length,表示该条高速公路连接的两个城市u; v,以及最高限速speed
和路长length。
Output
输出满足题意的时间,保留4 位小数。
Sample
drive.in drive.out
3 3
1 2 100 100
2 3 100 100
1 3 100 400
4.0000
drive.in drive.out
2 1
1 2 100 100
4.0000
Note
• 对于30% 的数据,1 n 102,1 m 103;
• 对于100% 的数据,1 n 4 103,1 m 104,60 speed 120 ,200 length 1000。

Drive:最短路
如果没有大雾天气,很显然就是求一个最短路就行了。但是由于大雾天气的存在,如果大雾天气出现在乐最短路的路径上,那么肯定不能按照最快的时间到达,如果这样的话很可能就失信与客户。所以我们就需要枚举最短路径上每条高速公路出现大雾天气的情况,再求最短路,可得一个最糟的情况,即得到在不失信于客户的前提下的最快时间。
注意到数据范围,每条高速公路的行驶时间最多相差10倍,spfa的时间复杂度的上界大概为O(kM),k = 10,而朴素Dijkstra求一次最短路为稳定O(n^2),总的最坏为O(n^3),所以我们采用spfa或者堆优化Dijkstra算法 (jyb写的STL堆优被卡了两个点)求最短路。

#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <cstdlib>
#include <algorithm>
#include <iostream>using namespace std;const int maxn = 4010;
const int maxm = 20010;struct edge {int u,v,next;double w;
}e[maxm];int h[maxn],num;
double dis[maxn];
int pre[maxn];
bool vis[maxn];
int q[maxn],head,tail;
int n,m;inline void build(int u, int v, double w) {num++; e[num].u = u, e[num].v = v, e[num].w = w, e[num].next = h[u], h[u] = num;
}inline void init() {for(int i = 2; i <= n; i++) dis[i] = 1000000.0;head = 0;tail = 1;q[0] = 1;vis[1] = true;
}double spfa(bool first) {int v,u;init();while(head != tail) {u = q[head];for(int i = h[u]; i; i = e[i].next) {v = e[i].v;if(dis[v] > dis[u]+e[i].w) {dis[v] = dis[u]+e[i].w;if(first) pre[v] = i;if(!vis[v]) {vis[v] = true;q[tail] = v;tail = (tail+1)%n;}}}vis[u] = false;head = (head+1)%n;}return dis[n];
}int main() {freopen("drive.in","r",stdin);freopen("drive.out","w",stdout);scanf("%d%d",&n,&m);int u,v;double sp,len;for(int i = 1; i <= m; i++) scanf("%d%d%lf%lf",&u,&v,&sp,&len), build(u,v,len/sp);int now = n;double ans = spfa(true);while(now != 1) {e[pre[now]].w *= 4.0;ans = max(ans,spfa(false));e[pre[now]].w /= 4.0;now = e[pre[now]].u;}printf("%.4lf\n",ans);return 0;
}

【最短路】Graph practice T2 drive 题解相关推荐

  1. HDU 6090 Rikka with Graph

    Rikka with Graph 思路: 官方题解: 代码: #include<bits/stdc++.h> using namespace std; #define ll long lo ...

  2. KUKA---US2电源的安全属性-------老款硬线连接实现的DRIVE安全STO SBC 、新款基于Safety over EtherCAT 网络帧实现的DRIVE安全STO SBC

    安全双回路的监控:(工业上的安全,是指安全等级,没有绝对的安全) 1.     机械式:监控关断继电器的辅助反馈触点,这个关断继电器包含机械联锁触点,这样反馈触点和主触点可以同步开关动作. 2.    ...

  3. HDU 6343.Problem L. Graph Theory Homework-数学 (2018 Multi-University Training Contest 4 1012)

    6343.Problem L. Graph Theory Homework 官方题解: 一篇写的很好的博客: HDU 6343 - Problem L. Graph Theory Homework - ...

  4. 图论入门(一),拓扑排序生成拓扑序列与Dijkstra求最短路

    基本知识 Dijkstra基本思想 拓扑排序思维视频讲解 848:有向图的拓扑排序 题目链接 题解: #include<bits/stdc++.h> using namespace std ...

  5. A* 第k短路详解 (详尽)

    首先分享一个我学习的博客文章: Poj2449-A*初步+k短路 看着他的题解学会了k短路..%%% 然后我就大致说一说k短路的求法吧.. 首先我们来看看A*. A*,启发式搜索,是一种较为有效的搜索 ...

  6. 2017年衢州联赛 T2

    2017年衢州联赛 T2 题目 题解 单调栈或单调序列 + 二分查找优化 代码(Pascal) var n,tot,ans:longint;a,q:array[0..50005]of longint; ...

  7. bzoj 4398: 福慧双修(最短路建模/构造)

    简述题意: 给定一个有向图,对于连接同两个点的边算作同一条,问不经过重复边的最小正权环. 保证没有重边(这个是指有向的),没有自环. 算法:最短路+构造 难度:NOIP+ 题解: 有一种暴力的思路,感 ...

  8. 哈尔滨理工大学软件与微电子学院程序设计竞赛(19级新生赛)——题解

    注:所有题目不要求多组输入 索引: A. 小乐乐学编程 B. 小乐乐算平均分 C. 小乐乐找最大数 D. 小乐乐是否被叫家长 E. 小乐乐转换成绩 F. 小乐乐算多少人被请家长 G. 小乐乐算最高分 ...

  9. [ZJOI2019]麻将 题解(dp 套 dp)

    文章目录 前言 题面 题解 坑点 代码 前言 做这道题的想法从看到这场比赛的 T2 的题解时就开始了.3.1 ~ 3.16 号,共 16 天的历程,我才终于搞出来这道题.在这 16 天里,我每天都要花 ...

最新文章

  1. java maven项目使用sonar审核代码
  2. CB:南土所梁玉婷组-细菌群落的高稳定性和代谢能力促进了土壤中易分解碳的快速减少...
  3. 域内主机间之共享文件(夹)访问
  4. 华硕服务器如何安装系统安装win7系统,华硕电脑怎么重新安装win7系统
  5. 前些天做的一个物联网架构三层扩展
  6. dell笔记本电脑驱动_笔记本电脑摄像头打不开,怎么办?总结经验(基于摄像头本身是完好的)...
  7. 窗口分析函数_16_找出最后一个元素
  8. 【机器视觉】 throw算子
  9. mssql 远程无法连接mysql_在本地 怎么远程连接MSSQL数据库
  10. 小白学 Python 爬虫:自动化测试框架 Selenium 从入门到实战
  11. The world’s largest
  12. 动态规划——最长公共子序列
  13. 数据结构笔记(十)-- 循环队列
  14. python unpack_Python使用struct处理二进制(pack和unpack用法)
  15. pdca管理循环基本主张_“PDCA”循环中的物业质量管理
  16. 今日头条php笔试题,2017年今日头条笔试题目
  17. html5脑图_HTML5 D3.js 树形结构动画示范(可绘制脑图)
  18. redis之瘦小精干的位图 (一)
  19. Android点9图机制及在聊天气泡中的应用
  20. 康耐视Visionpro-3D Tools 总览

热门文章

  1. 【Java写的碰碰球游戏(2) 】
  2. 电脑微信QQ正常登录,浏览器无法访问网站
  3. 树莓派控制4路5v继电器开关
  4. oracle错误号提示ORA-
  5. 在ubuntu20.04/18.04下安装无线网卡rtl8192fu驱动
  6. 数据结构:通过hash表建立一个宝可梦图鉴管理系统
  7. 73个word使用终极技巧
  8. 动态内存的分配与释放
  9. 如何解决SQLServer已超过了锁请求超时时段
  10. 操作系统知识点总结和题集大杂烩