【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$的距離。 作法 論文題。連結: https://link.springer.com/content/pdf/10.1007%2FBF01294129.pdf 大致上來說,先把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開始看即可)。