bzoj3245 最快路線 spfa

2021-07-11 04:29:33 字數 1409 閱讀 9851

精明的小r每每開車出行總是喜歡走最快路線,而不是最短路線.很明顯,每條道路的限速是小r需要考慮的關鍵問題.不過有一些限速標誌丟失了,於是小r將不知道能開多快.不過有乙個合理的方法是進入這段道路時不改變速度行駛.你的任務就是計算從小r家(0號路口)到d號路口的最快路線.

現在你得到了這個城市的地圖,這個地圖上的路都是單向的,而且對於兩個路口a和b,最多只有一條道路從a到b.並且假設可以瞬間完成路口的轉彎和加速.

第一行是三個整數n,m,d(路口數目,道路數目,和目的地). 路口由0...n-1標號

接下來m行,每行描述一條道路:有四個整數a,b,v,l,(起始路口,到達路口,限速,長度) 如果v=0說明這段路的限速標誌丟失.

開始時你位於0號路口,速度為70.

僅僅一行,按順序輸出從0到d經過的城市.保證最快路線只有一條.

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

0 5 2 3 1

【資料範圍】

30% n<=20

100% 2<=n<=150;0<=v<=500;1<=l<=500

題解:

記錄一下到點x的速度。

spfa的時候分有限速和沒限速討論一下即可。

可以看成是拆點spfa.

**:

#include#include#include#define n 200

#define m 40000

#define inf 2100000000

using namespace std;

int n,m,t,cnt,x,y,v,l,f[n][510],a[n],next[m<<1],point[n];

double dis[n][510],ans;

pairq[n*500*10],pre[n][510];

struct usee[m<<1];

void add(int x,int y,int v,int l)

void spfa()}}

else }}

} }}

void out(int x,int y)

int main()

spfa();ans=inf;

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

if (dis[t][i]<=ans)

out(t,x);

}

BZOJ 3245 最快路線

bzoj的source已經暴露了一切 直接上spfa,對於乙個點記錄到達它時的速度,然後進行轉移,基本上就是乙個分層圖的思路吧。因為要輸出方案,多開乙個陣列記錄就行了。include include include include include include using namespace st...

bzoj3245 最快路線

精明的小r每每開車出行總是喜歡走最快路線,而不是最短路線.很明顯,每條道路的限速是小r需要考慮的關鍵問題.不過有一些限速標誌丟失了,於是小r將不知道能開多快.不過有乙個合理的方法是進入這段道路時不改變速度行駛.你的任務就是計算從小r家 0號路口 到d號路口的最快路線.現在你得到了這個城市的地圖,這個...

85 8萬!吉利路特斯全新跑車最快2023年提車

作為一家曾與法拉利 保時捷起名的英國超跑品牌,路特斯自從被吉利收購後重新回到人們的視線,不僅全球總部落地武漢,並且還發布了多款新車。日前,路特斯品牌宣布,旗下全新跑車emira因為新冠疫情影響和產能受限,自2021年11月26日中午12點起,新增訂單交付預計從2023年開始。也就是說,即便現在立刻訂...