#F. 树的直径的问题

文章介绍了一种使用C++编程解决图论问题的方法,特别是针对树的直径和所有节点中最远跑步距离的计算。通过两次深度优先搜索找到树的直径及其两端点,然后分别计算所有节点到这两个端点的距离,最后找出最大总距离。
摘要由CSDN通过智能技术生成

Description

有n个点,由m条边连接,第i条边的边权是wi。这些点和边构成了一棵树.

对于树来说,我们都知道其最远的两个点之间的距离称为直径

现在树上每个节点上都有一个人,他必须先跑到离他较近的直径的某个端点,再跑到直径的另一个端点

现在问你,这N个人跑得最远的人,要跑多远的路

Format

Input

第一行给出n,m

接下来m行描述边,边权<=1000000000

N<=2e5

Output

如题

Samples

输入数据 1

输出数据 1

题解

思路

树的直径的定义:树上任意两节点之间最长的简单路径即为树的直径。

我们发现这道题可以先求出树的直径和那两个结点,再求出每个点到这两个结点的距离。然后便利每个点,用这个点到那两个结点的距离取最小值再加上树的直径再取最大值输出就行了。(具体看注释吧~~,包括树的直径的求法)

代码

如果觉得写得好的话就点个赞吧!

推荐树的直径定义及做法链接:https://blog.csdn.net/weq2011/article/details/128554959?spm=1001.2014.3001.5502

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值