[图论训练]BZOJ 3245: 最快路线【最短路】
Description
Input
Output
Sample Input
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
Sample Output
HINT
【数据范围】
30% N<=20
100% 2<=N<=150;0<=V<=500;1<=L<=500
Source
思路:其实很明显的,这里不仅要记录到这个点的时间,还有到这个点的速度,于是记录一个二维的dist[x][y]表示到x点时速度为y最短时间即可
需要注意的是为了使到这个点的速度最小,可能经过一个点多次,所以输出路径的数组需要开大,此外这个最大值比较大
#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
#include <map>
#include <queue>
#define maxn 100000
using namespace std;
int head[maxn],nex[maxn],point[maxn],len[maxn],speed[maxn], now;
typedef pair<int, int> pii;
pii pre[][];
int visit[][];
double dist[][];
int ans[];
void add(int x,int y,int s,int l)
{
nex[++now] = head[x];
head[x] = now;
point[now] = y;
len[now] = l;
speed[now] = s;
}
void spfa(int s)
{
for(int i=;i<=;i++)
for(int j = ; j <= ; j++)dist[i][j] = -;
dist[s][] = ;
visit[s][] = ;
queue<pii>q;
q.push(make_pair(s, ));
while(!q.empty())
{
pii k = q.front();
q.pop();
visit[k.first][k.second] = ;
for(int i = head[k.first]; i; i = nex[i])
{
int u = point[i], sp;
double di = ;
if(speed[i] != )
{
di = dist[k.first][k.second] + 1.0*len[i] / speed[i], sp = speed[i];
}
else
{
di = dist[k.first][k.second] + 1.0*len[i] / k.second, sp = k.second;
}
if(di < dist[u][sp] || dist[u][sp] == -)
{
dist[u][sp] = di;
pre[u][sp] = k;
if(!visit[u][sp])
{
visit[u][sp] = ;
q.push(make_pair(u,sp));
}
}
}
}
}
int main()
{
int n,m,d,x,y,a,b,h=;
scanf("%d%d%d",&n,&m,&d);
d++;
for(int i = ; i <= m; i++)
{
scanf("%d%d%d%d",&x,&y,&a,&b);
add(x + , y + , a, b);
}
spfa();
double an = 1000000000.00;
for(int i = ; i <= ; i++)if(dist[d][i] != -)
{
if(dist[d][i] < an)
{
an = dist[d][i];
y = i;
}
}
x = d;
ans[++h] = d;
while(pre[x][y].first != || pre[x][y].second != )
{
ans[++h] = pre[x][y].first;
int xx = pre[x][y].first, yy = pre[x][y].second;
x = xx; y = yy;
}
for(int i = h; i >= ; i--)
{
printf("%d ",ans[i]-);
}
printf("%d\n",ans[]-);
return ;
}
[图论训练]BZOJ 3245: 最快路线【最短路】的更多相关文章
- BZOJ 3245: 最快路线 spfa
3245: 最快路线 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3245 Description 精明的小R每每开车出行总是喜欢走最快 ...
- BZOJ 3245 最快路线
和道路升级差不多,只是用的spfa; 十分有毒,在BZOJ上一直WA,对拍拍出来是一样的却告诉我不一样,然后发现自己把'\n'写成了‘\b’... #include<cstdio> #in ...
- BZOJ3245:最快路线(最短路)
Description 精明的小R每每开车出行总是喜欢走最快路线,而不是最短路线.很明显,每条道路的限速是小R需要考虑的关键问题.不过有一些限速标志丢失了,于是小R将不知道能开多快.不过有一个合理的方 ...
- [图论训练]BZOJ 2118: 墨墨的等式 【最短路】
Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在 ...
- [图论训练]BZOJ 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路【floyd】
Description 农夫约翰正驾驶一条小艇在牛勒比海上航行. 海上有N(1≤N≤100)个岛屿,用1到N编号.约翰从1号小岛出发,最后到达N号小岛.一 张藏宝图上说,如果他的路程上 ...
- [BZOJ3245]最快路线
Description 精明的小R每每开车出行总是喜欢走最快路线,而不是最短路线.很明显,每条道路的限速是小R需要考虑的关键问题.不过有一些限速标志丢失了,于是小R将不知道能开多快.不过有一个合理的方 ...
- 洛谷 P4300 BZOJ 1266 [AHOI2006]上学路线route
题目描述 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可:“很可能我们在 ...
- BZOJ 1266: [AHOI2006]上学路线route(最短路+最小割)
第一问最短路.第二问,先把最短路的图建出来(边(u,v)满足d[s->u]+d[v->t]+d(u,v)==最短路径长度,就在图中,可以从源点和汇点分别跑一次最短路得到每个点到源点和汇点的 ...
- BZOJ 1880: [Sdoi2009]Elaxia的路线( 最短路 + dp )
找出同时在他们最短路上的边(dijkstra + dfs), 组成新图, 新图DAG的最长路就是答案...因为两人走同一条路但是不同方向也可以, 所以要把一种一个的s,t换一下再更新一次答案 ---- ...
随机推荐
- GentleNet使用之详细图解[语法使用增强版]
目录 第一章 开发环境 第二章 简介 第三章 Gentle.Net-1.5.0 下载文件包介绍 第四章 使用步骤 第五章 源码下载 第一章.开发环境: Vs 2010 + Sql 2005 + Gen ...
- Python——for表达式
一.for表达式 1.for表达式语法格式及用法 for表达式利用可迭代对象创建新的列表,for表达式也称为列表推导式,具体语法格式如下: [表达式 for 循环计数器 in 可迭代对象] 例: a ...
- c#中接口、抽象类、继承综合小练习
namespace Test { class Program { static void Main(string[] args) { //作业:橡皮rubber鸭子.木wood鸭子.真实的鸭子real ...
- 在Python中使用help帮助
在Python中使用help帮助 >>> import numpy >>> help(numpy.argsort) Help on function argsort ...
- 一句话懂什么是JS闭包
无论何时声明新函数并将其赋值给变量,都要存储函数定义和闭包.闭包包含在函数创建时作用域中的所有变量,它类似于背包.函数定义附带一个小背包,它的包中存储了函数定义创建时作用域中的所有变量. 我将永远记住 ...
- Struts2和SpringMVC简单配置以及区别总结
Struts2: struts 2 是一个基于MVC(mode-view-con)设计模式的Web应用框架,是由Struts1和WebWork两个经典框架发展而来的. 工作流程: 1客户端浏览器发出H ...
- 服务器TIME_WAIT和CLOSE_WAIT分析和解决办法
先上两张图: 查看TIME_WAIT和CLOSE_WAIT数的命令: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a ...
- loc与iloc函数的使用
Pandas中loc和iloc函数用法详解(源码+实例) https://blog.csdn.net/w_weiying/article/details/81411257 Pandas中loc,il ...
- python中字符串的一些用法
一.字符串的拼接: a=‘123’ b=‘abc’ d=‘hello world’ 1.print(a+b) 2.print(a,b) 3. c=‘ ’.join((a ...
- Linux对大容量硬盘分区
随着单块硬盘容量的增大和硬盘价格的下降,2TB的磁盘使用将很快会普及,由于传统的MBR方式存储分区表的方 式缺陷,将可能导致很多分区工具不能正确地读取大于2TB容量的硬盘而无法正常分区大容量硬盘.其实 ...