二維最短路 時間優化

2022-07-01 11:39:14 字數 991 閱讀 7226

輸入的第一行包含整數k,0<=k<=10000,這是bob在路上可以花費的最大硬幣數。

第二行包含整數n,2<=n<=100,即城市總數。

第三行包含整數r,1<=r<=10000,即道路總數。

以下r行中的每一行通過指定整數s、d、l和t來描述一條道路,這些整數由單個空白字元分隔:

s為源城市,1<=s<=n

d為目的地城市,1<=d<=n

l是道路長度,1<=l<=100

t是通行費(以硬幣數量表示),0<=t<=100

請注意,不同的道路可能具有相同的源城市和目標城市。

輸出的第一行和唯一一行應包含從城市1到城市n(其總通行費小於或等於k硬幣)的最短路徑的總長度。

如果不存在這樣的路徑,則只應將數字-1寫入輸出。

很簡單的最短路。f[i][j]:從1到i費用為j的最短路。

主要是優化。就是費用》k直接continue

還有第乙個到n的一定就是答案。因為狀態都合法,是按最短路跑的dp。第乙個n遇到就是合法最短路。

#include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #define pii pairusing namespace std;

struct edgee[10005];

int head[105], cut=0;

void addedge(int u, int v, int w, int c); head[u]=cut;

}struct node);

while(!q.empty())

vis[u][us]=1;

for(int i=head[u]; i; i=e[i].nxt));}}

}}int main()

getd(1, n, k);

return 0;

}

二維最短路

三元組用map int,int set 儲存 可以通過前繼pre和當前節點u找到下乙個v,使得 pre,u,v 在三元組中的節點 include include include include include include include include include define mem a,...

Fishmonger SPOJ 二維最短路

乙個圖中,對於每一條邊有兩個權值 路費和時間,我們要找一條從源點出發到終點的路,在這條路的時間不超過給定時間的基礎上,找到路費最少的路。如果按照普通的最短路,會因為有乙個時間的限制而找不到正確的解。找不到正確的解的原因就是對於每個點只能存乙個時間,然而我們可能在多個不同時間到達乙個點,不一定哪個時間...

最短路 二維 Roads

description 城市中有r條有向馬路,n個馬路連線點,通過每條馬路都要花去一定費用。你現在在編號為1的連線點 手裡有k元錢,要去n號連線點的最短路徑的長度是多少?途中經過道路的花費不能超過k。注意 兩個 馬路連線點間可能有多條馬路 input 第一行,k 0 k 10000 第二行,n 2 ...