【学习笔记】最小斯坦纳树

比赛前的算法复习

最小斯坦纳树

洛谷模板题
最小斯坦纳树,指在一张带权无向图中,给定指定的k个点,询问联通这k个点的最小路径权值和。
这种问题所给出的k一般较小,所以可以用状压DP来解决。

显然结论:最终选出的边构成的图一定是棵树

由此,我们可以定义 f(i,S) 为当前以 i为根,联通了集合 S 的点所需的最小权值和。
对于当前点 i ,有两种转移方式:

  • f(i,S)=min(f(i,S),f(j,S)+w(i,j))
    其中j为和i相邻的点,此转移相当于换根
  • f(i,S)=min(f(i,S),f(i,T)+f(i,ST))
    其中 TS 的子集,此转移可看作以 i 为根时的子树状态合并。

S 所包含点是单增的,所以我们可以从小到大枚举。

考虑第一种转移,形式类似于最短路,直接跑最短路就行。
第二种转移枚举子集

子集枚举模板
点击查看代码
for(int k=s&(s-1);k<=(1<<n);k=s&(k-1)){
	...
}

例题:[WC2008]游览计划

posted @   flywatre  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示