hdu 3721

题意: 给一棵树,可以移动树上的一条边,必须保证移动之后的图还是一棵树,问如何移动才能使得移动之后的树的直径最短 思路: 枚举每条边,如果移除了这条边,会将这棵树分成两部分,新增加的边必须是连接这两个部分的边,这样才能保证新形成的是一棵树,那么这样对于两个部分分别求出这个部分上面的点,满足这个点是这个部分中到其余所有点的最长的距离最短的点,显然新增加的边要连接这两个点才能使得新形成的树的直径最短 那么问题就变成了给定一棵树,求出一个满足上述条件的点了,其实只要先求出这棵树的直径,那么要求的点就一定是直径中心附近的那两个点之一了,证明如下: 假设要求的点不是直径上面的点,那么由于原图是一棵树,取这个点到直径的最短路径,交直径与一个点,这个点到其他点的最长距离一定大于交点到其他点的最长距离,这样就说明了要求的点一定是直径上面的点,既然是直径上面的点,因为直径是一条链,显然它一定是中心附近的点 求直径的方法直接bfs两次就可以了

转载于:https://www.cnblogs.com/zhaozhe/archive/2011/08/29/2158310.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值