>description
farmer john打算將**線引到自己的農場,但電信公司並不打算為他提供免費服務。於是,fj必須為此向電信公司支付一定的費用。
fj的農場周圍分布著n(1 <= n <= 1,000)根按1…n順次編號的廢棄的**線
杆,任意兩根**線桿間都沒有**線相連。一共p(1 <= p <= 10,000)對**
線桿間可以拉**線,其餘的那些由於隔得太遠而無法被連線。第i對**線桿的兩個端點分別為a_i、b_i,它們間的距離為l_i (1 <= l_i <= 1,000,000)。資料中保證每對最多隻出現1次。編號為1的**線桿已經接入了全國的**網路,整個農場的**線全都連到了編號為n的**線桿上。也就是說,fj的任務僅僅是找一條將1號和n號**線桿連起來的路徑,其餘的**線桿並不一定要連入**網路。
經過談判,電信公司最終同意免費為fj鏈結k(0 <= k < n)對由fj指定的**線桿。對於此外的那些**線,fj需要為它們付的費用,等於其中最長的**線的長度(每根**線僅鏈結一對**線桿)。如果需要鏈結的**線桿不超過k對,那麼fj的總支出為0。
請你計算一下,fj最少需要在**線上花多少錢。
>input
第1行: 3個用空格隔開的整數:n,p,以及k
第2…p+1行: 第i+1行為3個用空格隔開的整數:a_i,b_i,l_i
>output
第1行: 輸出1個整數,為fj在這項工程上的最小支出。如果任務不可能完成,輸出-1。
>sample input
5 7 1
1 2 5
3 1 4
2 4 8
3 2 3
5 2 9
3 4 7
4 5 6
>sample output
4>解題思路
竟然是二分(哈哈)
二分可能的答案,在這情況下設定代價小於等於mid的路徑權值為0,大於mid的權值為1,跑一遍1~n的最短路,如果代價小於等於k就說明mid是乙個合理的答案
>**
#include
#include
#include
using namespace std;
struct ooo
a[20005];
int n, p, k, u, v, s, t, h[
1005
], l, r, mid, head, tail, st[
3005
], c[
1005
], ans, w[
10005];
bool yd[
1005];
int main()
ans =
1000000
;while
(l < r)
} yd[st[head]]=
0;}if
(c[n]
<= k)
else l = mid +1;
}if(ans ==
1000000
)printf
("-1");
else
printf
("%d"
, ans)
;return0;
}
二分答案 spfa 架設電話線
架設 線 phoneline 題目描述 farmer john打算將 線引到自己的農場,但電信公司並不打算為他提供免費服務。於是,fj必須為此向電信公司支付一定的費用。fj的農場周圍分布著n 1 n 1,000 根按1.n順次編號的廢棄的 線桿,任意兩根 線桿間都沒有 線相連。一共p 1 p 10,...
LOJ 架設電話線 二分 spfa
題面見鏈結。題解 一般來說看到這總 第 k 大的 都往二分想想。這題其實蠻基礎的。二分這第 k 1 大的邊的權值,然後整個圖的邊比它大的權值為 1 比他小的權值為 0 最後跑一遍 spfa 求出整個圖的最短路徑,如果 k 則成立,可繼續縮小範圍,否則則只能增加範圍。如下 1 include2 usi...
架設電話線 題解
原題來自 usaco 2008 jan.silver 在郊區有 n 座通訊基站,p 條雙向電纜,第 i 條電纜連線基站 a i 和 b i 特別地,1 號基站是通訊公司的總站,n 號基站位於一座農場中。現在,農場主希望對通訊線路進行公升級,其中公升級第 i 條電纜需要花費 l i 公司正在舉行優惠活...