Codeforces Round #294 (Div.2) E Shaass the Great

题目大意:有一棵树,n个节点,n-1条边,每条边有权值,保证树是强连通的。

如果删掉一条边,在任意两个点之间建一条和该边权值相同的边(仍要保证是连通的,可以与原节点相同),这时任意两点间的距离之和为sum。

问sum最小为多少。


枚举任意一条边,把该点删掉以后再新建一条边,假设把树分为左右两堆,可以发现sum分为三个部分。

1. 左边任意两点的距离和。

2. 右边任意两点的距离和。

3. 左边任一点到右边任意点的距离和。


其中,第三部分仍可以拆分。

假设左边的节点数为numl,  右边节点数为numr;

枚举的这条边在左边的端点为 pointl, 在右边的端点为 pointr.

左边的任一点到pointl 的距离和为 suml,  右边的任一点到 pointr 的距离和为sumr.


可以看到,从左边选一点, 如果该点想到选定右端点需要经历三个部分,

1.  左端点 -> pointl 

2. pointl -> pointr

3. pointr -> 右端点

如果是想到达所有的右端点, 这三部分的总和为

1.   ( 左端点 -> pointl  )  * numr  

2.  ( pointl -> pointr  )  *  (  numl * numr   )

3.   sumr


反之,从右到左也是一样的。

再经过简化 ,  每枚举一条边 

sum  =  suml * numr  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值