4.收費站
(cost.pas/c/cpp)
【問題描述】
在某個遙遠的國家裡,有n個城市。編號為1,2,3,……,n。
這個國家修建了m條雙向的公路。每條公路連線著兩個城市。沿著某條公路,開車從乙個城市到另乙個城市,需花費一定的汽油。
開車每經過乙個城市,都會收取一定的費用(包括起點和終點城市)。所有的收費站都在城市中,在城市間的公路上沒有任何的收費站。
小紅現在要開車從u城市到v城市(1≤u,v≤n)。她的車最多可以裝下s公升汽油。在出發的時候,車的郵箱是滿的,並且她在路上不想加油。
在路上,每經過乙個城市,她要交一定的費用。如果他每次交的費用比較多,她的心情就會變得很糟。所以她想知道,在她能到達目的地的前提下,她交的費用中最多的一次最少是多少。這個問題對他來說太難了,於是她找到聰明的你,你能幫幫她嗎?
【輸入】
第一行5個正整數,n,m,u,v,s,分別代表有n個城市,m條公路,從城市u到城市v,車的油箱容量為s公升。
接下來有n行,每行乙個正整數,fi,表示經過城市i,需要交費fi元。
再接下來有m行,每行三個正整數,ai,bi,ci(1≤ai,bi≤n),表示城市ai和城市bi之間有一條公路,如果從城市ai到城市bi,或者從城市bi到城市ai,需要ci公升汽油。
【輸出】
僅乙個整數,表示小紅交費最多的一次的最小值。如果他無法到達城市v,輸出-1.
【輸入輸出樣例1】
cost.in
cost.out
3 4 2 3 8
2 1 2
2 4 1
1 3 4
3 4 3
【輸入輸出樣例2】
cost.in
cost.out
4 4 2 3 3
2 1 2
2 4 1
1 3 4
3 4 3
-1
#include#include#include#include#include#includeusing namespace std;
queue q;
int n,m,s,t,v;
int maxw,minw=1e9+1;
struct edge_
edge[100005];
struct node_
node[10005];
int d[10005];bool vis[10005];
int et;
void add(int u,int v,int w)
bool spfa(int x)
int tmp=d[v];
d[v]=min(d[v],d[u]+edge[b].w);
if (d[v]!=tmp&&vis[v]==false)
b=edge[b].next;}}
} if (d[t]<=v) return true;
else return false;
}void erfen(int l,int r)
for (i=1;i<=m;i++)
if (spfa(1000000005)==0) cout<<"-1";
else erfen(minw,maxw);
return 0;
}
【限制】
對於60%資料,滿足n≤200,m≤10000,s≤200
對於100%資料,滿足n≤10000,m≤50000,s≤1000000 000
對於100%資料,滿足ci≤1000 000 000,fi≤1000 000 000,可能有兩條邊連線著相同的城市。
二分答案+最短路
練習題 時鐘模擬
6 12 時鐘模擬 30分 乙個time類,資料成員有時 分 秒。要求模擬秒錶,每次走一秒,滿60秒進製,秒又從零開始計數。滿60分進製,分又從零開始計數。輸出時 分和秒的值。使用過載 運算子實現 class mytime 請在這裡填寫答案 int main mytime operator frie...
口算練習題 模擬演算法
題目描述 王老師正在教簡單算術運算。細心的王老師收集了i道學生經常做錯的口算題,並且想整理編寫成乙份練習。編排這些題目是一件繁瑣的事情,為此他想用電腦程式來提高工作效率。王老師希望儘量減少輸入的工作量,比如5 8的算式最好只要輸入5和8,輸出的結果要盡量詳細以方便後期排版的使用,比如對於上述輸入進行...
1007 數字邏輯練習題(模擬)
時間限制 1 sec 記憶體限制 128 mb 提交 264 解決 59 提交 狀態 討論版 原碼 反碼 補碼都是一樣的,都是正數本身。對於負數 原碼是符號位為 1,數值部分取絕對值的二進位制。反碼是符號位為 1,其它位是原碼取反。補碼是符號位為 1,其它位是原碼取反,未位加 1。輸入乙個 64bi...