二分答案 spfa 架設電話線

2022-05-21 03:15:12 字數 2407 閱讀 6208

架設**線(phoneline

【題目描述】

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最少需要在**線上花多少錢。

【輸入格式】

第1行: 3個用空格隔開的整數:n,p,以及k

第2..p+1行: 第i+1行為3個用空格隔開的整數:a_i,b_i,l_i

【輸入樣例】 (phoneline.in)

5 7 1

1 2 5

3 1 4

2 4 8

3 2 3

5 2 9

3 4 7

4 5 6

【輸入說明】

一共有5根廢棄的**線桿。**線桿1不能直接與**線桿4、5相連。**線桿5不能直接與**線桿1、3相連。其餘所有**線桿間均可拉**線。電信公司可以免費為fj鏈結一對**線桿。

【輸出格式】

1行: 輸出1個整數,為fj在這項工程上的最小支出。如果任務不可能完成,輸出-1

【輸出樣例】 (phoneline.out)

【輸出說明】

fj選擇如下的鏈結方案:1->3;3->2;2->5,這3對**線桿間需要的

**線的長度分別為4、3、9。fj讓電信公司提供那條長度為9的**線,於是,

他所需要購買的**線的最大長度為4。

這一題首先看到了最大值最小,那麼就可以用二分來解決

最主要的就是判斷了,由於存在環(樣例就有),所以我們用spfa求解,每次二分乙個mid,帶入spfa中,重新建圖,如果》mid就把權值設為1,<=mid就設為0(我們二分出來的mid意思是除去公司免費架設的之外最大的那乙個,所以》mid的就必須由公司免費提供),最後用求最短路的思想求出從1架設到n所需要免費提供的最少數量,如果<=kk,那麼就表示當前方案成立,>kk就不成立,更新區間

還是老問題,區間大小為2的時候就停下來進行特判

還有-1的問題,就在spfa中如果dist[n]到最後都沒有改變,那麼就表示無法與n點連通,所以就無法完成任務,輸出-1

架設電話線 二分答案 SPFA

description farmer john打算將 線引到自己的農場,但電信公司並不打算為他提供免費服務。於是,fj必須為此向電信公司支付一定的費用。fj的農場周圍分布著n 1 n 1,000 根按1 n順次編號的廢棄的 線 杆,任意兩根 線桿間都沒有 線相連。一共p 1 p 10,000 對 線...

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