HDU多校第三场1010/HDU-6982 Road Discount【包含恰好k条黑边的最小生成树】

题目链接

思路

官方题解写的很清楚,将原边看成白边,折扣边看成黑边,求恰好黑边数为 k k k的最小生成树。

这边有道一模一样的子问题BZOJ2654-tree.

我们需要设定一个 x x x值,对每条黑边的长度算上 + x +x +x的贡献,然后进行一次最小生成树,假如最小生成树的最终值为 s u m sum sum,选择了 c n t cnt cnt条黑边,那么最小生成树的值就是 s u m − c n t ∗ x sum-cnt*x sumcntx。因为题目所给的边的范围为 [ 0 , 1000 ] [0,1000] [0,1000],所以 x x x的范围为 [ − 1000 , 1000 ] [-1000,1000] [1000,1000].这样可以保证每一种黑边的情况。

在计算之前,首先可以把图缩小到 o ( n ) o(n) o(n)的级别,假如没有黑边,就是一个所有白边的最小生成树,没有白边,就是一个所有黑边的最小生成树。这样只有 O ( 2 n ) O(2n) O(2n)条边,那么对于最终黑白边混合的最小生成树,其所选的边一定是从这 2 n 2n 2n条边中选择。

同时我们可以发现,当 x x x值越小的时候,选择的黑边就会越多,满足单调性。

对于寻找边数恰好为 k k k的最小生成树,就有以下做法:

1、二分一个 x x x,将所有的黑边的权值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值