BZOJ4774-修路
在图上选中一些边,使给定的点对能通过选中的边连通,最小化选中的边的权值和
解法
斯坦纳树
将指定点集合中的所有点连通,且边权总和最小的生成树称为最小斯坦纳树(Minimal Steiner Tree)。
斯坦纳树可以通过dp求解,转移方程有两种:
- 枚举子树形态 $dp[S][i] = min(dp[s]+dp[S \ xor \ s])$
- 按照边进行松弛 $dp[S][i] = min(dp[S][j]+w[j][i])$
其中$S$为选取的子集,$s$ 和$S\ xor\ s$为$S$的状态划分。第二类转移方程可以通过跑一次最短路进行松弛。
本题需要再做一次子集dp,因为不成对的点可能不连通。
代码
1 |
|