UVa 1664 (Conquer a New Region) 并查集

题目链接:https://cn.vjudge.net/problem/UVA-1664


题意:n个城市形成一棵树,每条边有权值C(i, j)。任意两个点的容量S(i, j)定义为i与j唯一通路容量上的最小值。找一个点(他将成为中心城市),使得它到其他所有点的容量之和最大。


思路:很巧妙地并查集维护问题。首先把所有边按照权值从大到小排序,这样可以确保我们每次选出的边都比已选出的小。接下来按照Kruskal的思路来,假设我们已经维护好了一些集合(点的集合),其中每个集合中某个点到集合中所有点容量和的最大值为sum[i],集合点的数量为cnt[i]。对于下一条被选出的边(u,v,c),设u属于集合X,v属于集合Y,如果我们选择X中的点作为中心城市,则答案为sum[X] + cnt[Y] * c(因为这条边比已经出现的边权值都要小,所以两个集合间必以这条路作为容量),同理,若选Y中点作为中心城市,则答案为sum[Y] + cnt[X] * c,我们取两者中的最大值,将较小值的集合合并到较大值的集合。一步步下去,最终集合的sum值就是答案。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值