最小直径生成树

最小直径生成树

其实就是找树的绝对中心(到其他节点的最大距离最小,可证直径为绝对中心到其他节点最远距离乘2,也就是说直径两端点到绝对中心距离相等,且绝对中心可能在边上)。

求绝对中心

​ 枚举边,假设绝对中心在该边(u,v)上,边长L,设其到u的距离为x,则直径的1/2应为 m a x ( d [ u ] [ i ] + x , d [ v ] [ i ] + L − x ) max(d[u][i]+x,d[v][i]+L-x) max(d[u][i]+x,d[v][i]+Lx),其图像如下(盗的图),要与max所以图像为实现部分,那么我们要找的值就是最低点所对应的,我们先对 d [ u ] [ i ] d[u][i] d[u][i]排序,只有当 d [ v ] [ i ] > d [ v ] [ l a s t ] , l a s t 指 上 一 次 满 足 条 件 的 i d[v][i]>d[v][last],last指上一次满足条件的i d[v][i]>d[v][last],lasti,才有可能取最小值,此时直径1/2 为 d [ v ] [ l a s t ] + L − x 或 d [ u ] [ i ] + x d[v][last]+L-x或d[u][i]+x d[v][last]+Lxd[u][i]+x,所以直径 d [ v ] [ l a s t ] + d [ u ] [ i ] + w ( u , v ) d[v][last]+d[u][i]+w(u,v) d[v][last]+d[u][i]+w(u,v).
附上盗的图,好多博客都有。
在这里插入图片描述

求最小直径生成树

求最小直径生成树

求出绝对中心,若在边上,给两个端点附上初始距离,再跑最短路径生成树即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值