AcWing 340 通訊線路

2021-10-01 03:39:15 字數 1495 閱讀 8089

在郊區有 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分層圖,我寫的第一道不是板子題的圖論,必須寫個部落格記錄一下,分層圖之前寫過一道題,但當時沒有學,用另外一種方法做的。

分層圖不多解釋了,改了一下迪傑斯特拉,覺得過不了,但交上去還是過了。

#include

#include

#include

#include

using

namespace std;

typedef pair<

int,

int>p;

const

int inf =

0x3f3f3f3f

;const

int n =

1e6+

500;

int n, m, k;

vectorg[n]

;int d[n]

;void

add(

int u,

int v,

int w)

void

dijkstra

(int st)

;memset

(d,inf,

sizeof

(d))

; d[st]=0

; priority_queue,greater>que;

que.

push(p

(0,st));

while

(!que.

empty()

)}}}

intmain()

}for

(int i=

1; i<=k; i++

)add

(i*n,

(i+1

)*n,0)

;dijkstra(1

);if(d[

(k+1

)*n]

==inf)

puts

("-1");

else

printf

("%d"

,d[(k+1)

*n])

;return0;

}

340 通訊線路(二分答案 spfa)

在郊區有 n 座通訊基站,p 條 雙向 電纜,第 i 條電纜連線基站ai和bi。特別地,1 號基站是通訊公司的總站,n 號基站位於一座農場中。現在,農場主希望對通訊線路進行公升級,其中公升級第 i 條電纜需要花費li。公司正在舉行優惠活動。農產主可以指定一條從 1 號基站到 n 號基站的路徑,並指定...

COGS T 7 通訊線路

輸入檔案 mcst.in輸出檔案 mcst.out簡單對比 時間限制 1.5 s 記憶體限制 128 mb 問題描述 假設要在n個城市之間建立通訊聯絡網,則連通n個城市只需要n 1條線路。這時,如何在最少經費的前提下建立這個通訊網。在每兩個城市之間都可以設定 條線路,相應地都要付出一定的經濟代價。n...

POJ 3662 通訊線路

摘要 簡單來講就是在無向圖上求出一條從1到n的路徑,使路徑上第k 1大的邊權盡量小。第k大的盡量小,這種表述就容易讓人想到二分。那麼我們只要把權值大於mid的路徑權值設為1,小於mid的置為0,求1到n的最短路是否不超過n即可。include include include include incl...