zoukankan      html  css  js  c++  java
  • 斯坦纳树入门小记

    前言

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

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

    大致思想

    考虑最朴素的状压(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] 游览计划

  • 相关阅读:
    DRF小结
    js中BOM与DOM的概念与区别
    css单位分析、颜色设置与调色板
    css中伪类与伪元素的区别
    flexbox与grid layout的区别
    grid的简单使用
    position属性的总结
    html,css
    homework
    aboutme and my goal
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/SteinerTree.html
Copyright © 2011-2022 走看看