【最短路】Graph practice T2 drive 题解
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 题解相关推荐
- HDU 6090 Rikka with Graph
Rikka with Graph 思路: 官方题解: 代码: #include<bits/stdc++.h> using namespace std; #define ll long lo ...
- KUKA---US2电源的安全属性-------老款硬线连接实现的DRIVE安全STO SBC 、新款基于Safety over EtherCAT 网络帧实现的DRIVE安全STO SBC
安全双回路的监控:(工业上的安全,是指安全等级,没有绝对的安全) 1. 机械式:监控关断继电器的辅助反馈触点,这个关断继电器包含机械联锁触点,这样反馈触点和主触点可以同步开关动作. 2. ...
- 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 - ...
- 图论入门(一),拓扑排序生成拓扑序列与Dijkstra求最短路
基本知识 Dijkstra基本思想 拓扑排序思维视频讲解 848:有向图的拓扑排序 题目链接 题解: #include<bits/stdc++.h> using namespace std ...
- A* 第k短路详解 (详尽)
首先分享一个我学习的博客文章: Poj2449-A*初步+k短路 看着他的题解学会了k短路..%%% 然后我就大致说一说k短路的求法吧.. 首先我们来看看A*. A*,启发式搜索,是一种较为有效的搜索 ...
- 2017年衢州联赛 T2
2017年衢州联赛 T2 题目 题解 单调栈或单调序列 + 二分查找优化 代码(Pascal) var n,tot,ans:longint;a,q:array[0..50005]of longint; ...
- bzoj 4398: 福慧双修(最短路建模/构造)
简述题意: 给定一个有向图,对于连接同两个点的边算作同一条,问不经过重复边的最小正权环. 保证没有重边(这个是指有向的),没有自环. 算法:最短路+构造 难度:NOIP+ 题解: 有一种暴力的思路,感 ...
- 哈尔滨理工大学软件与微电子学院程序设计竞赛(19级新生赛)——题解
注:所有题目不要求多组输入 索引: A. 小乐乐学编程 B. 小乐乐算平均分 C. 小乐乐找最大数 D. 小乐乐是否被叫家长 E. 小乐乐转换成绩 F. 小乐乐算多少人被请家长 G. 小乐乐算最高分 ...
- [ZJOI2019]麻将 题解(dp 套 dp)
文章目录 前言 题面 题解 坑点 代码 前言 做这道题的想法从看到这场比赛的 T2 的题解时就开始了.3.1 ~ 3.16 号,共 16 天的历程,我才终于搞出来这道题.在这 16 天里,我每天都要花 ...
最新文章
- java maven项目使用sonar审核代码
- CB:南土所梁玉婷组-细菌群落的高稳定性和代谢能力促进了土壤中易分解碳的快速减少...
- 域内主机间之共享文件(夹)访问
- 华硕服务器如何安装系统安装win7系统,华硕电脑怎么重新安装win7系统
- 前些天做的一个物联网架构三层扩展
- dell笔记本电脑驱动_笔记本电脑摄像头打不开,怎么办?总结经验(基于摄像头本身是完好的)...
- 窗口分析函数_16_找出最后一个元素
- 【机器视觉】 throw算子
- mssql 远程无法连接mysql_在本地 怎么远程连接MSSQL数据库
- 小白学 Python 爬虫:自动化测试框架 Selenium 从入门到实战
- The world’s largest
- 动态规划——最长公共子序列
- 数据结构笔记(十)-- 循环队列
- python unpack_Python使用struct处理二进制(pack和unpack用法)
- pdca管理循环基本主张_“PDCA”循环中的物业质量管理
- 今日头条php笔试题,2017年今日头条笔试题目
- html5脑图_HTML5 D3.js 树形结构动画示范(可绘制脑图)
- redis之瘦小精干的位图 (一)
- Android点9图机制及在聊天气泡中的应用
- 康耐视Visionpro-3D Tools 总览