輸入的第一行包含整數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 ...