CSP认证201703-4地铁修建[C++题解]:连通路径上的最大边权最小、bfs求边权为1的最短路、二分查找
文章目錄
- 題目解答
- 題目鏈接
題目解答
來源:acwing
分析:
題目給定n個點和m條邊,要求最多選擇n條邊,使得1到n連通,然后每段路同時開工,求最小工時。換句話說,求的是連通路上最大邊權最小。
這題可以用二分來做。為什么呢?
假設最大邊權在數軸上的A點(邊長為a)能夠解決該題,那么換句話說,就是連通路徑上,所有邊長都是小于等于a。
作為題目,1到n點不會只有最佳的路徑連通,還會有其他路徑連通,只不過邊權會大一點。也就是說,對于數軸上A點右邊(長度都大于a),也是可以使得1到n連通的。而A點左邊的點是不能使之連通的(否則的話,最優解就不是邊長a啦)。
所以,滿足這個性質(某個點的一邊滿足條件,而另一邊不滿足條件)的題目,可以用二分查找來枚舉最優邊權mid。
也就是說,對于枚舉的邊權mid,我們只走邊權小于等于mid 的邊,看是否1到n連通,并且走過的邊數小于等于n。如果連通,說明枚舉的mid大了,讓r = mid;否則說明枚舉的最優邊權小了,應該讓l = mid +1;
換個角度,構造兩張圖,一張是原圖,另一張是邊權為1的圖,這樣在遍歷原圖的邊權小于mid時,說明這條路可以走,即在第二張圖中可以選擇這條路,我們在第二張圖中求最短距離!這樣做有什么好處呢?在第二張圖中所有的邊權都是1,然后bfs求最短路即可,只要到n號點的最短路小于等于n(在原圖中的含義是走過了小于等于n條邊),這就說明該mid是滿足條件(連通,并且所選的邊權都小于等于mid)的,可以讓r= mid,遍歷更小的mid,從而不斷向最優解靠近,求出最優解。
ac代碼
題目鏈接
https://www.acwing.com/problem/content/description/3248/
總結
以上是生活随笔為你收集整理的CSP认证201703-4地铁修建[C++题解]:连通路径上的最大边权最小、bfs求边权为1的最短路、二分查找的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSP认证201703-3Markdow
- 下一篇: CSP认证201709-1打酱油[C++