洛谷P1266 速度限制

2021-08-06 02:10:38 字數 864 閱讀 3363

解題思路:

1.求最快路線類似於求最短路,想到用spfa解決。

2.和一般的spfa不同,本題的路徑中是以距離/速度來更新答案的,並且速度存在兩種情況,需要分別分析。

3.既然有了速度這個變數,我們需要用陣列來儲存記錄速度,dis[i][j]表示從到i點時速度為j的最快路線。在更新最短路的時候判斷一下速度是否為0,用不同的速度更新答案。

4.題目要求輸出路徑,需要記錄點和速度,遞迴輸出路徑。

#include

#include

#include

#include

#define pr pair

using

namespace

std;

queue

int,int> >q;

struct nodelist[505*505];

double dis[505][505];

bool v[255][505];

int n,m,k,s,ans,x,y,t,z,head[255],px[255][505],ps[255][505];

void add(int x,int y,int t,int z)

void spfa()}}

else }}

}}}void print(int a,int b)

int main()

spfa();

double ans=1e30;int c;

for (int i=1;i<=500;i++)

print(px[k][c],ps[k][c]);

cout

<1;

return

0;}

洛谷 P1266 速度限制 題解

題面 這道題可以理解為是乙個分層圖,也可以理解為是二維的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 ...

spfa裂點 洛谷P1266 速度限制

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

P1266 速度限制

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