树的直径

树的直径定义为树上两个最远节点之间的最长简单路径

最长简单路径是指树中两个节点之间的路径,该路径不包含任何重复的节点。换句话说,这条路径上的所有节点都是唯一的,没有重复的节点。

树中两次DFS找到的最长路径必定是树的直径(最长的那条路径)

题目 (点击)

【问题描述】
农夫约翰有N个农场,标号为1到N。M条不同的垂直或水平的道路连接着农场,道路的长度不超过1000。这些农场的分布就像下面的地图一样,图中农场用F1..F7表示:

每个农场最多能在东西南北四个方向连接4个不同的农场。此外,农场只处在道路的两端。道路不会交叉且每个农场间有且仅有一条路径。但是约翰丢了农场的地图,他只得从电脑的备份信息中修复了。每一条道路信息描述如下:

从农场23往南经距离10到达农场17
从农场1往东经距离7到达农场17
……

最近美国过度肥胖非常普遍,农夫约翰为了让他的奶牛多做运动,举办了奶牛马拉松。马拉松路线要尽量长,请帮助约翰寻找两个最远的农场间的距离。

【输入格式】
第1行两个整数N和M。
第2到第M+1行:每行包括4个分开的整数:F1,F2,L,D分别描述两个农场的编号,道路的长度,F1到F2的方向N,E,S,W。

【输出格式】
一个整数,表示最远两个农场的距离。

【输入样例】

7 6
1 6 13 E
6 3 9 E
3 5 6 S
4 1 3 N
2 4 20 W
4 7 2 S

    1
    2
    3
    4
    5
    6
    7

【输出样例】

51

    1

【样例解释】
最长的马拉松路线通过4,1,6,3到5;总长为:20+3+12+9+7=32。

【数据范围】
1<=N,M<=40000

  • 第一次DFS:从任意一个节点开始,进行深度优先搜索,找到距离这个起点最远的节点,记为点Q。由于树是连通的,这次搜索会遍历所有节点,并且能够找到距离初始节点最远的节点Q。
  • 第二次DFS:再次进行深度优先搜索,但这次是从点Q出发,寻找距离Q最远的节点,记为点W。同样的道理,这次搜索会找到距离Q最远的节点W。

先从任意一点P出发,找离它最远的点Q,再从点Q出发,找离它最远的点W,W到Q的距离就是是的直径

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值