最小K度限制生成树

算法目的:给出 V0,K 和一个带边权的无向图,求出在 V0 的度数最多为 K 的限制下的最小生成树

预备知识:最小生成树、动态规划

定义强制K度最小生成树为所有生成树中V0的度数为 K 的权值最小的生成树

大概思路:先把V0 V0 有关的边都删除,假设现在的图分成了 M 个联通块,则我们可以得知对于任何生成树V0的度数至少为 M 。那么我们依次求出强制M度最小生成树强制M+1度最小生成树强制K度最小生成树,这些生成树的最小值就是最小K度限制生成树

定理:任意强制K+1度最小生成树一定可以由某个强制K度最小生成树替换一条边得到

定理的证明:我们可以把强制K度最小生成树想象成V0连着 K 颗树,设新加入的边为(A1,B1),(A2,B2)

易知,不存在 (Ai,Bi) 在同一棵树中。因为如果有,则两个生成树中至少有一个不是最小生成树
同理,也不存在 (Ai,Bi) 跨越不同的树。
所以可以得出所有的 (Ai,Bi) 满足 Ai=V0 Bi=V0

又因为经过替换之后 V0 的度数只增加了1,所以若加入了X条这样的边,就必须删掉X-1条这样的边
由于原来的树是强制K度最小生成树,所以一定不存在在某棵树中换一个点与 V0 相连使得答案变小的情况
所以可以得出,所有的这样添加和删除操作必然都是在同一棵树中进行的
可以证明原来这棵树与 V0 相连的边一定不会被替换掉,所以X-1=0,X=1
也就是说,强制K+1度最小生成树是从强制K度最小生成树删一条边再加一条边产生的
证毕

有了这个定理,我们就可以更加快速的求出强制K度最小生成树

算法步骤:1.先求出 M ,并对每个联通快求出一个最小生成树,然后选择一个权值最小的边使其和V0相连,这就是强制M度最小生成树

     2.然后考虑求强制M+1度最小生成树,根据定理,这个生成树是由上一个生成树替换一条边得到。当我们加入 (V0,S) 时,我们一定会选择删除现在从 V0 S 路径上边权最大的那个,所以我们O(N)扫一遍所有点,进行一次DP,求出从V0到所有点的路径最大权值是多少

     3.接着扫一遍所有没被加入的与 V0 相连的边,选择一条加入之后最优的边(边权-被替换掉的边权最小),把它加入进来,然后把原来的边加入,这就得到了强制M+1度最小生成树

     4.重复上面的过程,直到求出了强制K度最小生成树,则最小K度限制生成树一定在这些答案当中

算法复杂度:最开始求出最小生成树O(ElogE),接着进行K次替换,每次替换需要O(N)DP,再O(E)比较。所以总的时间复杂度为 O(ElogE+K(N+E))

代码?等我写了再贴吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值