斯坦纳树

给出一张带权图和几个关键点,求包含所有关键点的最小生成图。

其实最终的生成图是一棵树,如果有环,删一条边肯定不劣。

其实最小斯坦纳树就是最短路+状压 dp,所以关键点个数一般很小。为什么这么说呢?

\(f_{u,S}\) 表示点 \(u\) 在树上,关键点在树上的集合为 \(S\)。转移分为两部分:

  1. \(u\) 在树上只有一个邻居 \(v\),那么:

\[f_{u,S}=\min_{(u,v)\in E}f_{v,S}+w \]

  1. \(u\) 在树上有不止一个邻居,令 \(u\) 为根,那么 \(u\) 的每一棵子树都可以贡献一个不为空的关键点集合,当然两棵子树的关键点集合交集为空,这就是标准的背包,注意 \(S\) 从小到大枚举。

\[f_{u,S}=\min_{T\subseteq S}(f_{u,T}+f_{v,S-T}) \]

代码稍后再贴

posted @ 2026-09-08 17:07  Tanliu  阅读(6)  评论(0)    收藏  举报