首页 > 其他 > 详细

带有度限制的最小生成树

时间:2015-12-09 23:15:42      阅读:277      评论:0      收藏:0      [点我收藏+]

概念:在一个无向图中,在某个特殊点限制了必须为k度的情况下,而求出的最小生成树。


一些阐述

[关于字母]

设边集为E,特殊点为V0,最小限制生成树为D

Hi表示V0的度数为i时的最小生成树。

[关于操作]

删添操作:在树上加入某条顶点为V0的点,在构成的环中删掉另一条不与V0关联的边。

最大删添:删添时去掉环中最大的一条不与V0关联的边。

差额最大删添:加入的边与最大删添的差值最大的一次删添。


原理:见黑书p300-p303

证明有些复杂,于是跳过证明得到定理一:

TV1...Vn的某棵最小生成树,若边(i,j)不属于T,则(i,j)不属于D


这样可以大大缩小选择边的范围。


定理二:

H1T的基础上加一条最短的(V0,Vi)

H1可以通过k-1次差额最小删添操作得到Hk


这样可以方便我们从H1逐渐递推到Hk


具体步骤

1.找到V1...Vn的所有连通块,求出每个连通块的最小生成树Ti

2.在每个块中选出一条最小的与V0相连的边 [ 若块的数目t>k则无解 ],从而得到Ht

3.for i=t+1 to k

通过Hi-1 上进行“差额最小删添操作”,添加并删除一条边得到Hi

其中差额最小删添操作的优化可以用:令Maxi表示ViV0的路径上的最大边,那么连上(V0,Vi)的代价就是f(Vi)=w(V0,Vi)-Maxi,所有f(Vi)中的最小值就是差额最小删添操作。

Maxi的预处理需要O(n)V0开始dfs,每次选了一条(V0,Vi)后则需要从Vi再跑一次,也是O(n)的。

4.输出答案

 

题目练习Poj 1639 Picnic Planning野餐计划

 

还没打过代码...未完待续

带有度限制的最小生成树

原文:http://www.cnblogs.com/Robert-Yuan/p/5034467.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!