S40605.6-5 拆解巨树

传统题 时间 1000 ms 内存 256 MiB 3 尝试 0 已通过 0

6-5 拆解巨树

拆解巨树

磁场的尽头,是一片由数据流构成的森林。树木不是植物,是权限结构的可视化。每棵树有成千上万个节点,节点之间的连线代表权限的传递。Echo说,要找到这棵树里最长的路径——从某个节点出发,沿着连线走,能走到的最远的距离。

"那就是树的直径。"Echo说,"Zero的权限树里,最长的路径代表最深层的控制链。"

"咋个找?"CC问,"一条条试?"

"不。"你说,"先找一个平衡点——让树的左右两边尽量均衡。然后从那个点开始,向两边同时探索。每砍断一根树枝,就把它下面的小树单独处理。"

"这像……"CC想了想,"像砍树。先找到树干最粗的地方,然后一层一层剥下去。"

"对。"

你开始写。先从树根出发,找到最远的节点A;再从A出发,找到最远的节点B。A到B的距离就是树的直径。为了加速,每次处理一个节点时,把它下面的子树一个个拆开,分别计算每个子树的最深路径。

屏幕上跳出了结果。第47号节点到第94号节点的距离最长——47。

"又是47。"CC说。

"第47号节点。"Echo说,"那是Zero的权限起点——所有控制的源头。"

"那我们去掐断它?"

"不。"Echo说,"我们沿着它,找到Zero的真正核心。"


题目描述

nn 个节点的树,求树的直径(最长路径的长度)。

输入格式

nn。然后 n1n-1 条边,每条边有长度。

输出格式

树的直径。

输入样例

4
1 2
2 3
3 4
2 0 0 0

输出样例

0

提示

  • 两次BFS/DFS。先找最远点A,再从A找最远点B,A到B的距离即为直径。
  • 或点分治。找重心,递归处理每棵子树。

分块与点分治——意识迷宫的外围

清查暗格、清点群落、划分矿区、解析磁场、拆解巨树。

五道关卡全部通过。意识迷宫的外围结构被解析,露出了更深层的网络。

Echo站在森林的尽头,投影比以往任何时候都更明亮。

"下一层。"她说,"是平衡树与可持久化。"

"又是新名词?"CC问。

"对。"Echo说,"但这次不是单一结构——是多重历史版本的叠加。我们要在时间的裂缝里,找到那些被删除的记忆。"

[下一章:平衡树与可持久化 —— 时间墙]

在线编程 IDE

建议全屏模式获得最佳体验