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

2021-10-02 18:39:13 字數 1457 閱讀 6903

在郊區有 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因為我們要找的是把k跳邊去掉之後,這條路徑剩下的最大的一條邊。

那麼我們直接二分答案尋找這條邊的值,如果某條邊的權值大於我們假設的權值,那麼我們就直接把這條邊的權值設為1,否則設為0。那麼我們就得到了權值只有0或1的圖。如果我們找到的最短路徑》k 就說明我們假設的這個答案太小了,我們需要增大答案的值,反之則說明我們假設的答案小於等於正確答案。

#include

using namespace std;

typedef

long

long ll;

typedef pair<

int,

int> pii;

typedef

unsigned

long

long ull;

const

int n=

1e3+7;

const

int m=

2e4+7;

const

int inf=

0x3f3f3f3f

;int n,m,k;

int h[n]

,e[m]

,ne[m]

,w[m]

,idx,cc[m]

;int d[n]

;bool st[n]

;void

add(

int a,

int b,

int c)

intspfa()

}}}return d[n];}

bool judge

(int x)

}int num=

spfa()

;if(num<=k)

return true;

else

return false;

}int

main()

int l=

0,r=

1000001

;int ans=-1

;while

(lelse

} cout

}

AcWing 340 通訊線路

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

雙端佇列 二分 通訊線路

在郊區有 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...