給定乙個包含 \(n\) 個點和 \(m\) 條邊的無向聯通圖 \(g=(v,e)\)。
再給定包含 \(k\) 個結點的點集 \(s\),選出 \(g\) 的子圖 \(g'=(v',e')\),使得:
\(s\subseteq v'\);
\(g'\) 為連通圖;
\(e'\) 中所有邊的邊權和最小。
由於要求邊權和最小,我們最後得到的一定是一棵樹,我們稱之為最小斯坦納樹。
一般情況下 \(s\) 的元素個數都非常小,我們考慮用狀態壓縮,設 \(f[i][s]\) 表示以 \(i\) 為根的至少包含 \(s\) 這個狀態的邊權最小值。
在乙個連通塊內部我們可以用子集\(dp\)的方式轉移:\(f[i][s]=min(f[i][s],f[i][s']+f[i][s\oplus s'])\),其中 \(\oplus\) 為異或操作,\(s'\) 為 \(s\) 的乙個子集。
考慮如何擴充套件連通塊(拓展根):我們把已知的 \(f[i][s]\) 跑一遍多源最短路,就可以得到全部的 \(f[?][s]\) 了。
例題:luogu p6192 【模板】最小斯坦納樹
題解luogu p3264 [jloi2015]管道連線
題解fzoj 2331 lyk loves graph 題解
最小斯坦納樹
給定乙個包含 n 個結點和 m 條帶權邊的無向連通圖 g v,e 再給定包含 k 個結點的點集 s 選出 g 的子圖 g v e 使得 s subseteq v g 為連通圖 e 中所有邊的權值和最小。你只需要求出 e 中所有邊的權值和。dp i s 表示 以 i 為根的一棵樹,包含集合 s 中所有...
最小斯坦納樹 學習筆記
斯坦納樹問題是組合優化問題,與最小生成樹相似,是最短網路的一種。最小生成樹是在給定的點集和邊中尋求最短網路使所有點連通。而最小斯坦納樹允許在給定點外增加額外的點,使生成的最短網路開銷最小。可以這麼理解 乙個圖的生成樹是構造一棵樹把所有點給聯通,而斯坦納樹則是構造一棵樹把給定的幾個點聯通。如同生成樹有...
模板 斯坦納樹
include int main 斯坦納樹 time limit 1 sec memory limit 128 mb description 現在有乙個n m的矩陣,某些元素為0,剩下的元素大於0.現在你要選擇一些元素,使得任意兩個為0的元素都能夠通過選中的元素四連通.注意,若想達到要求,所有的0自...