架設**線(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 公司正在舉行優惠活...