bzoj3245 最快路線

2022-06-03 21:36:09 字數 1623 閱讀 2558

精明的小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

用dis[i][v]表示走到i點速度為v的最短時間,spfa。

//serene

#include#include#include#include#include#includeusing namespace std;

const int maxn=150+10,maxv=500+10,maxm=maxn*maxn;

const double inf=2e8;

int n,m,s=1,t,zz[maxn];

int aa;char cc;

int read()

int fir[maxn],to[maxm],nxt[maxm],e=0;

double v[maxm],l[maxm];

void add(int x,int y,double vv,double ll)

struct nodenode[maxn*maxv];

double dis[maxn][maxv];

bool vis[maxn][maxv];

int from[maxn][maxv];

void spfa()

} }}int main()

spfa();

double ans=inf;

for(int i=0;i<=500;++i) if(dis[t][i]int tot=0;

for(int i=t*1000+vv;i/1000!=1;i=from[i/1000][i%1000]) zz[++tot]=i/1000;

printf("0");

for(int i=tot;i;--i) printf(" %d",zz[i]-1);

return 0;

}

BZOJ 3245 最快路線

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

bzoj3245 最快路線 spfa

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

qzezoj 1543 最快路線

題面傳送門 看到這道題,想到spf aspfa spfa 但這道題好像故意的,偏偏又路牌被拆的道路 在衢州的話負責那一段路的交警就該 了 所以我們不能只以d id i di 為tim etime time 的唯一標準。想象一下 如果下一條路是沒有路牌的,而這時過來一條路,tim etime time...