架設電話線 二分答案 SPFA

2021-10-09 03:11:55 字數 1743 閱讀 6476

>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 公司正在舉行優惠活...