把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

斯坦纳树入门小记

前言

普通的最小生成树,是用于求使给定点集连通的最小代价。

而斯坦纳树的不同点就在于,除了必选点之外,它还可以选择一些不必连通的辅助点,起到减小代价的作用。

大致思想

考虑最朴素的状压\(DP\),设\(f_S\)表示连通点集\(S\)的最小代价。

但是,斯坦纳树的题目一般都是必选点数量很小,辅助点数量却可能很多。

因此我们不得不改变状态的设立方式:\(f_{i,S}\)表示以\(i\)为根、连通必选点点集\(S\)的最小代价。

说是以\(i\)为根,实际上这个根并没有什么具体意义,只是单纯方便转移而已。

然后转移就用两种方式:

  • 根据点转移:枚举\(S\)的一个子集\(T\),得到\(f_{i,S}=f_{i,T}+f_{i,S\ xor\ T}-a_i\)。即把凭借\(a_i\)连通的两个连通块合并起来,减去\(a_i\)是因为它在两个连通块中都有贡献,计算重复了。
  • 根据边转移:枚举一条边\((u,v)\),得到\(f_{v,S}=f_{u,S}+a_v\)。不难发现这就相当于是一个最短路的式子,直接\(SPFA\)即可。

例题

板子题:【BZOJ2595】[WC2008] 游览计划

posted @ 2020-07-20 12:31  TheLostWeak  阅读(239)  评论(0编辑  收藏  举报