最小斯坦纳树&最小树形图

两个知识点。

首先是最小树形图,意思是有一张带权有向图,钦定一个点,希望保留一些边使得这个点可以到达所有点,最小化边权和。思路上就是说贪心地选择每个点权最小的入边并加入集合中,这样形成的图兴许是最优的(和某B开头的最小生成树算法异曲同工)。但是有可能会出现环,此时就需要缩点,然后一直做下去即可。就这么个思想,还没看到哪道题里有应用,就先放到这里吧,板子有些细节但还是比较好背的。拓展:若没有钦定根,建立虚拟点并向每个点连极大边即可。

然后是最小斯坦因树。给定一张图,有很少的特殊点,希望保留尽量少的边使得这些点联通。板子的链接。由于特殊点数量很少,考虑状压,用 \(f_{x,s}\) 代表 \(x\) 为根的子树包含集合 \(s\) 中的边的最小代价。有两种转移,一种是 \(f_{x,s}=\min(f_{x,t}+f_{x,s-t})\),另一种是考虑当前状态从另一个点那里转移过来,即 \(f_{x,s}=f_{y,s}+\text{dis}(x,y)\),这一部分用 SPFA 来跑就可以了。复杂度是 \(O(n3^k)\),毕竟有个枚举子集在那里。

板子题还有 游览计划,需要稍微改变一下方程(因为代价变成了点权而非边权),所以会变成 \(f_{x,s}=\min(f_{x,t}+f_{x,s-t})-a_x\),边权要变成目标点的点权。输出方案其实还好,记录一下每个点从哪里转移过来的即可。

posted @ 2022-12-01 11:02  Feynn  阅读(109)  评论(0编辑  收藏  举报