【LOJ2262】「CTSC2017」網路
阿新 • • 發佈:2018-11-19
【題目連結】
【思路要點】
- 首先,本題一點重要的觀察是,新建的路徑的兩個端點必定在樹的直徑上,若一個方案新建路徑的兩個端點有一個不在直徑上,我們令其向直徑靠近,不會使答案變劣。
- 因此,我們可以將直徑拿出來考慮,令直徑上點數為 ,每一個點為 , 與 在樹上的連邊長度為 , 。
- 如果我們切斷直徑上所有的邊,樹會分成 塊,每一塊的直徑是無可避免的,令 為每一塊直徑的最大值,則答案至少為 ,至多為直徑長度 。令 為從 出發在第 塊內的最長路徑的長度。
- 有了答案的區間 ,考慮二分答案 ,判斷是否存在使得所有距離不超過 的連邊方案。
- 假設我們最終的連邊為 ,那麼對於任意一對 ,以下兩點至少有一點成立是存在方案的充要條件:
、
、 ,其中 為新增的邊長- 由於要求是 ,我們可以列舉 式中的兩個絕對值的展開方式,將其轉化為 個不帶絕對值的限制。
- 對 分別按照 排序,在第一個順序中列舉 ,對應滿足 式的 應當是第二個順序的一個字首,忽略掉滿足 式的 ,對於剩餘的一定要滿足 式的 ,我們分別求出出現過最緊的限制 。
- 接下來問題轉化為了判斷是否存在 ,滿足
、
、