斯坦纳树
给出一张带权图和几个关键点,求包含所有关键点的最小生成图。
其实最终的生成图是一棵树,如果有环,删一条边肯定不劣。
其实最小斯坦纳树就是最短路+状压 dp,所以关键点个数一般很小。为什么这么说呢?
设 \(f_{u,S}\) 表示点 \(u\) 在树上,关键点在树上的集合为 \(S\)。转移分为两部分:
- \(u\) 在树上只有一个邻居 \(v\),那么:
\[f_{u,S}=\min_{(u,v)\in E}f_{v,S}+w
\]
- \(u\) 在树上有不止一个邻居,令 \(u\) 为根,那么 \(u\) 的每一棵子树都可以贡献一个不为空的关键点集合,当然两棵子树的关键点集合交集为空,这就是标准的背包,注意 \(S\) 从小到大枚举。
\[f_{u,S}=\min_{T\subseteq S}(f_{u,T}+f_{v,S-T})
\]
代码稍后再贴

浙公网安备 33010602011771号