在郊區有 n 座通訊基站,p 條 雙向 電纜,第 i 條電纜連線基站ai和bi。
特別地,1 號基站是通訊公司的總站,n 號基站位於一座農場中。
現在,農場主希望對通訊線路進行公升級,其中公升級第 i 條電纜需要花費li。
**公司正在舉行優惠活動。
農產主可以指定一條從 1 號基站到 n 號基站的路徑,並指定路徑上不超過 k 條電纜,由**公司免費提供公升級服務。
農場主只需要支付在該路徑上剩餘的電纜中,公升級**最貴的那條電纜的花費即可。
求至少用多少錢可以完成公升級。
輸入格式
第1行:三個整數n,p,k。
第2…p+1行:第 i+1 行包含三個整數ai,bi,li。
輸出格式
包含乙個整數表示最少花費。
若1號基站與n號基站之間不存在路徑,則輸出」-1」。
資料範圍
0 ≤k
1000 ,0≤k0≤ k1000,1≤ p≤ 10000 1≤p≤10000 1≤p≤10 000, 1 ≤l i≤ 1000000 1≤l_i≤1000000 1≤li≤ 1000 000輸入樣例: 5 7 1 1 2 5 3 1 4 2 4 8 3 2 3 5 2 9 3 4 7 4 5 6 輸出樣例: 4這道題,題目中很明顯的意圖就是讓我們求最小的最大值,這個一般都是用二分來做的。我們這道題二分的如果大於乙個值,則邊權為1,否則為0,所以求0,1的這種最短路我們又可以用雙端佇列來做。在我們二分處理完後就是我們的第k+1大的邊,也就是我們的答案。#include
using
namespace std;
const
int n=
20010
;int ne[n]
,e[n]
,cnt,head[n]
,w[n]
,n,p,k,dis[n]
;bool vis[n]
;deque<
int>q;
void
add(
int a,
int b,
int c)
bool
check
(int bound)}}
return dis[n]
<=k;
}int
main()
int l=
0,r=
1e6+1;
while
(lif(r==
1e6+
1) r=-1
; cout } 在郊區有 n 座通訊基站,p 條 雙向 電纜,第 i 條電纜連線基站ai和bi。特別地,1 號基站是通訊公司的總站,n 號基站位於一座農場中。現在,農場主希望對通訊線路進行公升級,其中公升級第 i 條電纜需要花費li。公司正在舉行優惠活動。農產主可以指定一條從 1 號基站到 n 號基站的路徑,並指定... 在郊區有 n 座通訊基站,p 條 雙向 電纜,第 i 條電纜連線基站ai和bi。特別地,1 號基站是通訊公司的總站,n 號基站位於一座農場中。現在,農場主希望對通訊線路進行公升級,其中公升級第 i 條電纜需要花費li。公司正在舉行優惠活動。農產主可以指定一條從 1 號基站到 n 號基站的路徑,並指定... 輸入檔案 mcst.in輸出檔案 mcst.out簡單對比 時間限制 1.5 s 記憶體限制 128 mb 問題描述 假設要在n個城市之間建立通訊聯絡網,則連通n個城市只需要n 1條線路。這時,如何在最少經費的前提下建立這個通訊網。在每兩個城市之間都可以設定 條線路,相應地都要付出一定的經濟代價。n...340 通訊線路(二分答案 spfa)
AcWing 340 通訊線路
COGS T 7 通訊線路