浅析斯坦纳树
淺析斯坦納樹
一、概述
斯坦納樹用來解決一下類似于最小連通性但是又不是單純的最小生成樹的問題。
二、一般情況
例題:洛谷P6192 【模板】最小斯坦納樹
題意:給定一個帶權無向圖和(k)個定點,要求一個權值和最小的子圖使得給定的所有點都在這個子圖上并讓這個子圖權值最小。(kleq10,nleq100,mleq500)。
由于(k)非常小,考慮狀壓(dp),設(f(i,j))表示包含(i)號節點,滿足對于定點的聯通性為(j)的子圖的最小權值。
考慮轉移有以下兩種方式:
(1)、可以在同一個點(i)把包含(i)的兩個連通塊并起來,那么這樣的轉移即為:
[f(i,j)=min(f(i,j),f(i,S)+f(i,complement_jS)[Ssubset j])
]
(2)、可以在(i)這個點加一條邊從而讓(i)和其他連通塊相合并:
[f(i,j)=min(f(i,j),f(v,j)+val(i,v))
]
注意到這個方程實際上是三角形不等式,可以用(spfa)或(dij)轉移,那么我們對于每一種狀態先處理出第一種轉移,再(dij)轉移第二種即可。
最終答案就是(min f(i,2^k-1))。
三、點帶權的斯坦納樹問題
例題:[WC2008]游覽計劃
求最小點權的斯坦納樹。
問題的本質和邊帶權是一樣的,特殊之處就是在子集合并的時候會算重一遍(i)點的權值,那么減掉即可。
第一種轉移變為
[f(i,j)=min(f(i,j),f(i,S)+f(i,complement_jS-a_i)[Ssubset j])
]
即可。
四、只要求某些定點之間相互連通的斯坦納樹問題
例題1:[BZOJ4774]修路
題意:要求一個邊帶權的最小子圖使得(i(1leq ileq d))號點和(n-i+1)號點聯通,(dleq4)。
首先考慮狀壓(dp),唯一的不同就是我們可以允許某些點之間不連通,那么先做一遍普通的斯坦納樹,之后我們再做一次子集(dp)即可,設(g(i))表示聯通性為(i)最小的滿足要求的斯坦納森林的權值,那么轉移枚舉(i)的子集,之后要求這個子集和它的補集都必須滿足如果第(i)個點在集合中那么第(n-i+1)個點必須在集合中即可。
例題2:[JLOI2015]管道連接
題意:要求一個邊帶權的最小子圖使得所有給定的顏色相同的點都在同一個連通塊內。
同例題1,只不過判定合法子集的方式有所改變而已。
總結
- 上一篇: 福伦达 2 月上市 Super Wide
- 下一篇: excel怎么启用宏_EXCEL制作的小