最小树形图

裸题意:

给你一个图,每条边有一个花费,指定一个点为根,要求选其中若干条边构成一棵合法的树,且花费最少,求最小花费。

与最小生成树的区别:最小生成树是要最大的边权最小,最小树形图是要边权和最小。

朱刘算法:

最小树形图一般用朱刘算法。

朱刘算法是由两个中国人提出,一个姓朱,一个姓刘,所以叫朱刘算法。

———————————我是分界线,下面正文———————————–

首先要认识到,这个最小花费一定不小于每个点的 k 的和(假设k是与这个点相连的边中花费最小的边的花费),所以直接选边权最小的边有可能就是最小树形图。

如图:

最小树形图(1)

边上的黑色数字是花费,点上的红色数字就是 k 啦。

所以就先贪心先选好每个点的最小花费的边,然后把这条边的花费累加到ans

但是这样有一个问题:可能有环。

如上图选完边之后的效果:

最小树形图(2)

然而出现了两个环,没有构成一棵树,怎么办?

有环就把环缩成点咯。

缩点之后就要把原来环里面的点的连向环外的点的边重新连回去。

不过由于环内每个点已经累加一次边值了,所以要把每个点连出去的边的花费都减 k <script type="math/tex" id="MathJax-Element-15">k</script> 。

效果如图:

最小树形图(3)

(红边是选了的)

然后接着每个没选边的点接着选边,接着缩点,直到没有出现环时就是一棵树。

这棵树就是最小树形图。

例题:POJ3164(裸题)、HDU2121题解戳这

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值