洛谷 P1266 速度限制 題解

2022-07-13 20:09:18 字數 1010 閱讀 2348

題面

這道題可以理解為是乙個分層圖,也可以理解為是二維的spfa

dis[i][j]表示到達i這個點速度為j的最短路

然後跑已經死了的spfa就好了;

#include #define inc(i,a,b) for(register int i=a;i<=b;i++)

using namespace std;

int head[200010],cnt;

int inf=2e9+1;

class littlestar

}star[200010];

int n,m,t;

class node1;

double dis[301][501];

int vis[301][501];

node1 pre[301][501];

void spfa()

); inc(i,0,n) inc(j,0,500) dis[i][j]=inf,pre[i][j].u=-1,pre[i][j].speed=-1;

dis[0][70]=0;

while(qwq.size())

spfa();

double minn=999999999.9,id=0;

inc(i,0,500)

} int now=t,now2=id,cnt=0;

while(now!=-1)

for(int i=cnt;i>=1;i--)}/*

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

*/

洛谷P1266 速度限制

解題思路 1.求最快路線類似於求最短路,想到用spfa解決。2.和一般的spfa不同,本題的路徑中是以距離 速度來更新答案的,並且速度存在兩種情況,需要分別分析。3.既然有了速度這個變數,我們需要用陣列來儲存記錄速度,dis i j 表示從到i點時速度為j的最快路線。在更新最短路的時候判斷一下速度是...

P1266 速度限制

速度限制 給出一張有向圖,每條邊有乙個長度和乙個速度限制 和日常的限速差不多 但是有一些路的限速我們也不知道,所以就只能猜乙個,於是就令上一條路的限速為限速。感覺好隨意啊 求從起點 0 到終點 d 的最短時間。注意 乙個節點是可以重複走的 那個.t s v 就不用我多說了吧。有兩個條件就跑二位最短路...

spfa裂點 洛谷P1266 速度限制

我靠直接裂點 就是d i j 表示在速度為j的時候到i最短時間 相對的g i j 2 就記錄方案 這樣大力裂點跑spfa就好了 這樣的話,原來的queue裡面要存兩個值 乙個是點,乙個是速度 但是我懶,僅僅存了點 然後在spfa的時候列舉速度 雖然滿了一點,還是過了 include using na...