题目描述

在这个繁忙的社会中,我们往往不再去选择最短的道路,而是选择最快的路线。开车时每条道路的限速成为最关键的问题。不幸的是,有一些限速的标志丢失了,因此你无法得知应该开多快。一种可以辩解的解决方案是,按照原来的速度行驶。你的任务是计算两地间的最快路线。

你将获得一份现代化城市的道路交通信息。为了使问题简化,地图只包括路口和道路。每条道路是有向的,只连接了两条道路,并且最多只有一块限速标志,位于路的起点。两地A和B,最多只有一条道路从A连接到B。你可以假设加速能够在瞬间完成并且不会有交通堵塞等情况影响你。当然,你的车速不能超过当前的速度限制。

输入输出格式

输入格式:

第一行是3个整数N,M和D(2<=N<=150),表示道路的数目,用0..N-1标记。M是道路的总数,D表示你的目的地。

接下来的M行,每行描述一条道路,每行有4个整数A(0≤A<N),B(0≤B<N),V(0≤V≤500)and L(1≤L≤500),这条路是从A到B的,速度限制是V,长度为L。如果V是0,表示这条路的限速未知。

如果V不为0,则经过该路的时间T=L/V。否则T=L/Vold,Vold是你到达该路口前的速度。开始时你位于0点,并且速度为70。

输出格式:

输出文件仅一行整数,表示从0到D经过的城市。

输出的顺序必须按照你经过这些城市的顺序,以0开始,以D结束。仅有一条最快路线。

输入输出样例

输入样例#1:

6 15 1
0 1 25 68
0 2 30 50
0 5 0 101
1 2 70 77
1 3 35 42
2 0 0 22
2 1 40 86
2 3 0 23
2 4 45 40
3 1 64 14
3 5 0 23
4 1 95 8
5 1 0 84
5 2 90 64
5 3 36 40
输出样例#1:

0 5 2 3 1

最短路

far[i][j] 表示以速度j到城市i需要的时间

vi[i][j] 表示以速度j到城市i之前的速度

pre[i][j] 表示以速度j到城市i之前的城市

vis[i][j] 表示是否以速度j到达过城市i

屠龙宝刀点击就送

#include <cstring>
#include <cstdio>
#include <queue>
#define N 150
#define fi first
#define sc second
using namespace std;
bool vis[N][];
double far[N][];
int n,m,d,cnt,to[N<<<<],vi[N][],pre[N][],head[N],nextt[N<<<<],leg[N<<<<],V[N<<<<];
queue<pair<int,int> >q;
void spfa()
{
memset(vis,,sizeof(vis));
memset(far,,sizeof(far));
q.push(make_pair(,));
far[][]=;
vis[][]=true;
for(int pu,pv;!q.empty();)
{
pu=q.front().fi,pv=q.front().sc;q.pop();
vis[pu][pv]=false;
for(int i=head[pu];i;i=nextt[i])
{
int v=to[i];
if(!V[i])
{
if(far[v][pv]>far[pu][pv]+leg[i]*1.0/pv)
{
far[v][pv]=far[pu][pv]+leg[i]*1.0/pv;
pre[v][pv]=pu;
vi[v][pv]=pv;
if(!vis[v][pv])
{
q.push(make_pair(v,pv));
vis[v][pv]=true;
}
}
}
else
{
int vn=V[i];
if(far[v][vn]>far[pu][pv]+leg[i]*1.0/vn)
{
far[v][vn]=far[pu][pv]+leg[i]*1.0/vn;
pre[v][vn]=pu;
vi[v][vn]=pv;
if(!vis[v][vn])
{
q.push(make_pair(v,vn));
vis[v][vn]=true;
}
}
}
}
}
}
void output(int x,int v)
{
if(x) output(pre[x][v],vi[x][v]);
printf("%d ",x);
}
int main(int argc,char *argv[])
{
scanf("%d%d%d",&n,&m,&d);
for(int A,B,C,D;m--;)
{
scanf("%d%d%d%d",&A,&B,&C,&D);
nextt[++cnt]=head[A];to[cnt]=B;V[cnt]=C;leg[cnt]=D;head[A]=cnt;
}
spfa();
double minx=1e18;
int pos=;
for(int i=;i<=;++i)
{
if(far[d][i]<minx)
{
minx=far[d][i];
pos=i;
}
}
output(pre[d][pos],vi[d][pos]);
printf("%d\n",d);
return ;
}

洛谷 P1266 速度限制的更多相关文章

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

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

  2. 洛谷P1266速度限制

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

  3. 洛谷 P1266 速度限制 题解

    题面 这道题可以理解为是一个分层图,也可以理解为是二维的SPFA dis[i][j]表示到达i这个点速度为j的最短路 然后跑已经死了的SPFA就好了: #include <bits/stdc++ ...

  4. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  5. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  6. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  7. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  8. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  9. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

随机推荐

  1. Gym - 101572E Emptying the Baltic bfs加剪枝

    题目传送门 题目大意:给出一幅海洋的描述,0为海平面,负数即有水,在给出的xy坐标的底部安放抽水机,问最多能有多少水.水往低处流,且八个方向都可以. 思路:bfs,记录到每一个节点有效的最低海平面,然 ...

  2. 牛客Professional Manager(并查集)

    t’s universally acknowledged that there’re innumerable trees in the campus of HUST.  Thus a professi ...

  3. 为经典版eclipse增加web and Java EE插件

    http://download.eclipse.org/releases/luna/ 0 1 2选择对应版本“luna”,http://download.eclipse.org/releases/lu ...

  4. pyhive -- thrift.transport.TTransport.TTransportException: TSocket read 0 bytes

    Pyhive 远程连接hive出现问题: from pyhive import hive import pandas as pd #Create Hive connection conn = hive ...

  5. my.资料

    领回梦丹 http://ka.gamedog.cn/card/2036517.html 1. 普陀的加点没有优点缺点之分,只有是否和你的装备般配.这里可以给一些小数据参考. 60级物理防御达到900, ...

  6. mysql远程连接问题 Lost connection to MySQL server at ‘reading initial communication packet', system error: 0

    在用Navicat for MySQL远程连接mysql的时候,出现了 Lost connection to MySQL server at ‘reading initial communicatio ...

  7. “随机数”函数的 ES6 实现

    生成一个指定长度的数字数组 const getNumArray = len => [...new Array(len).keys()]; const getNumArray = len => ...

  8. vue resource 携带cookie请求 vue cookie 跨域(六)

    1.依赖VueResource  确保已安装vue-resource到项目中,找到当前项目,命令行输入: npm install vue-resource --save 在主方法添加 过滤 Vue.h ...

  9. MySQL 0 学习

    ubuntu  安装mysql  创建用户  以及外部如何可视化连接的   方法   https://www.linuxidc.com/Linux/2017-01/139502.htm 2.3 MyS ...

  10. python3+Appium自动化13-H5元素定位实践案例

    测试场景 启动钉钉app进入工作H5页面,点击考勤签到 查看webview上元素 1.电脑上打开chrome浏览器输入:chrome://inspect/#devices 2.Discover USB ...