【TOI2019 三模 pC】 網路佈線問題

題目敘述

給一張有邊權的無向圖和一個常數$K$,我們要找出一顆生成樹滿足
  • 這顆生成樹的全中總和不超過$(1+\frac{2}{K})MST$
  • 對於所有$i$都有$dist(i)\le (1+K)dist'(i)$
其中,$MST$表示最小升生成樹權重和,$dist(i)$表示生成樹上$1$和$i$的距離,$dist'(i)$表示原圖上$1$和$i$的距離。

作法

大致上來說,先把MST和Shortest-Path Tree建好。我們用$p[]$和$d[]$分別來紀錄“當前的樹”中每個人的爸爸和到root(原題的1,程式碼中的0)的距離,然後在等等的dfs過程中不斷用$relax$函數來建出這顆樹。注意到一次成功的$relax(u,v)$做的事就是把當前的樹中$v$的爸爸改前$u$。
接著dfs MST,每次發現有節點的距離太大時(也就是$dist(i)>(1+K)dist'(i)$),就直接用shortest-path tree的邊換掉。最後複雜度是$O(n)$,至於詳細作法和證明可以參考論文,裡面還有一個簡單的範例幫助暸解(直接從P308. Section 3開始看即可)。

留言

這個網誌中的熱門文章

【TOI2019 三模 pD】自助餐

【TOI2019 二模 pA】吠市數列

【TOI2019 三模 pA】圓的最佳覆蓋