時間限制: 1 sec 記憶體限制: 128 mb
題目描述
farmer john 熱衷於散步,每天早上他都要從 1 號倉庫走到 n 號倉庫。 farmer john 家的 n 個倉庫被 m 條雙向道路連通起來,每條道路有乙個長度 w。而farmer john 又不喜歡走路,所以他走的是從 1 號倉庫到 n 號倉庫的最短路。
但是 farmer 的奶牛們總想搞點事情,他們計畫著把 m 條道路的其中一條變成原來長度的 2 倍,使得 farmer john 可能會多走一點路。
他們想知道,最多能讓 farmer john 多走多少路呢?
輸入第一行乙個正整數 n,m,表示倉庫個數和道路條數。
接下來 m 行,每行三個正整數,表示每條雙向道路的連線的倉庫和該雙向道路的長度。
輸出輸出只有一行,表示最多能讓 farmer john 每天早上多走多少路。
樣例輸入
複製樣例資料
5 72 1 5
1 3 1
3 2 8
3 5 7
3 4 3
2 4 7
4 5 2
樣例輸出2提示
一開始的最短路為1→3→4→5,長度為1+3+2=6。
將連線3和4的邊變為原來的兩倍,3×2=6。
改造後的圖,最短路為1→3→5,長度為1+7=8。
多走了8−6=2的路程,可以證明這是最大的答案。
對於50%的資料,1≤n≤50。
對於100%的資料,1≤n≤250,1≤m≤25000,1≤w≤106。
保證沒有重邊。
#include
using namespace std;
typedef
long
long ll;
const
int maxn=
300;
const
int inf=
0x3f3f3f3f
;bool vis[maxn]
;ll d[maxn]
;int way[maxn]
[maxn]
;int path[maxn]
;int n,m,u,v,w;
bool once=true;
void
dijkstra()
} vis[x]
=true;
for(
int y=
1;y<=n;y++)}
}}}int
main()
dijkstra()
; ll minway=d[n]
; once=false;
int pos=n;
ll maxminway=minway;
while
(true)
printf
("%lld\n"
,maxminway-minway)
;return0;
}
poj 1062 dijkstra 列舉區間
要求 n個點每個點有乙個權值和等級,每個點有x條有向邊,有向邊也有權值。從第1個點出發,到每個點的路徑的權值等於每條邊的權值加上終點的權值。路徑的等級最大值與等級最小值的差值不大於m,終點可以是第1個點。求路徑權值最小值。方法 dijkstra 列舉區間 1.dijkstra求最短路時注意列舉區間等...
昂貴的聘禮 dijkstra 列舉區間
年輕的探險家來到了乙個印第安部落裡。在那裡他和酋長的女兒相愛了,於是便向酋長去求親。酋長要他用10000個金幣作為聘禮才答應把女兒嫁給他。探險家拿不出這麼多金幣,便請求酋長降低要求。酋長說 嗯,如果你能夠替我弄到大祭司的皮襖,我可以只要8000金幣。如果你能夠弄來他的水晶球,那麼只要5000金幣就行...
題目四 路徑和
給定乙個包含非負整數的 m x n 網格 grid 請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。輸入 grid 1,3,1 1,5,1 4,2,1 輸出 7 override public int minpathsum int grid int ...