传送门

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

——代码

 #include <queue>
#include <cstdio>
#include <cstring> using namespace std; const int MAXN = ;
int n, m, d, cnt;
int head[MAXN], to[MAXN * MAXN], next[MAXN * MAXN], spd[MAXN * MAXN], lon[MAXN * MAXN], pr[MAXN][], ps[MAXN][];
double dis[MAXN][], ans = ;
bool vis[MAXN][];
queue < pair <int, int> > q;
pair <int, int> x; inline void add(int x, int y, int v, int l)
{
to[cnt] = y;
spd[cnt] = v;
lon[cnt] = l;
next[cnt] = head[x];
head[x] = cnt++;
} inline void spfa()
{
int i, j, u, v, s, p;
memset(dis, , sizeof(dis));
q.push(make_pair(, ));
dis[][] = ;
while(!q.empty())
{
x = q.front();
q.pop();
u = x.first;
s = x.second;
vis[u][s] = ;
for(i = head[u]; i != -; i = next[i])
{
v = to[i];
p = spd[i] == ? s : spd[i];
if(dis[v][p] > dis[u][s] + 1.0 * lon[i] / p)
{
dis[v][p] = dis[u][s] + 1.0 * lon[i] / p;
pr[v][p] = u;
ps[v][p] = s;
if(!vis[v][p])
{
vis[v][p] = ;
q.push(make_pair(v, p));
}
}
}
}
} inline void print(int u, int pos)
{
if(pr[u][pos] != -) print(pr[u][pos], ps[u][pos]);
printf("%d ", u);
} int main()
{
int i, x, y, v, l, pos;
scanf("%d %d %d", &n, &m, &d);
memset(pr, -, sizeof(pr));
memset(ps, -, sizeof(ps));
memset(head, -, sizeof(head));
for(i = ; i <= m; i++)
{
scanf("%d %d %d %d", &x, &y, &v, &l);
add(x, y, v, l);
}
spfa();
for(i = ; i <= ; i++)
if(ans > dis[d][i])
ans = dis[d][i], pos = i;
print(d, pos);
return ;
}

[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. RAID基础

    磁盘类型 类型 IDE Integrated Drive Electronics SATA Srial ATA SCSI Small Computer System Interface FC Fibe ...

  2. 基于CentOS 7.2个人网盘的实现

    首先使用YUM安装依赖环境: [root@sishen ~]#yum install python python-setuptools python-imaging python-ldap pytho ...

  3. Pycharm中pygame报错

    什么鬼???我记得刚安装过啊-.. 并且本机只有一个python3.5,环境变量之前都是正常,我去折腾了大半天,原来在pycharm中安装模块是在如下所示图中 以后如果没有安装模块,都可以在这里进行安 ...

  4. SQL中的笛卡儿积问题和多表连接操作

    (使用scott用户) SELECT * FROM scott.dept;--4SELECT * FROM scott.emp;--14 /**笛卡尔积内连接(等值连接)外连接(非等值连接)自连接*/ ...

  5. tar.bz2

    tar -xvjf gcc-4.1.0.tar.bz2 bzip2 -d  gcc-4.1.0.tar.bz2

  6. java中同步(synchronized)详解

    一.开山篇: 1.synchronized的使用 一个程序中,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题.在Java中内置了语言级的同步原语--synchronized,这也大大简 ...

  7. innerHTML引起IE的内存泄漏

      内存泄漏常见的原因有三种: 1. 闭包 2. 未解除事件绑定 3. 循环引用DOM元素 除此之外,还有一种泄漏原因少有人知,它和innerHTML有关,不过很容易解决. 出现这种内存泄漏需要有三个 ...

  8. mysqldump 使用详解

    基本的使用方法总结: 1 导出所有库 系统命令行 mysqldump -uusername -ppassword --all-databases > all.sql  2 导入所有库 mysql ...

  9. stay hungry stay foolish.

    I am honored to be with you today at your commencement from one of the finest universities in the wo ...

  10. CentOS6 自己动手搭建开放NTP服务器

    第一步: 1. 安装NTP服务程序: [root@host ~]# rpm -qa | grep ntp #查询是否安装ntp服务程序 [root@host ~]# yum install -y nt ...