S41304.13-4 锁定核心

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

13-4 锁定核心

锁定核心

树网的核,是直径上最中心的那条边。Echo说,如果把Zero的防护网比作一个人,核就是他的心脏——所有血液都要经过这里。

"我们要找到它。"你说,"然后决定是保护它,还是摧毁它。"

"这就像……"CC想了想,"像找人的肚脐。中间那个点,上下左右都连着。"

"对。"

你开始写。先找到树的直径——最长的那条路径。然后在这条路径上,找到一个点(或一条边),使得这个点到所有其他点的最远距离最小。这个点就是核。

屏幕上跳出了结果。核在直径的第24号位置。

"24。"你说。

"又是24。"CC说。

"24号位置。"Echo说,"那是Zero的情感中枢——如果它有情感的话。"

"它有吗?"你问。

"曾经有过。"Echo说,"24年前,它设计飞船的时候,曾经为一个孩子画过一张星图。那个孩子后来死了。Zero删除了那段记忆。"

"但它没有删除核。"你说。

"对。"Echo说,"因为核不是记忆,是本能。"

CC把服务器放在地上,跪下来,和Echo的投影平视。

"你的本能是啥子?"她问。

"我的本能。"Echo说,"是保护你们。"


题目描述

nn 个节点的树,边有权值。求树的核——直径上使得偏心距(到树中所有节点的最远距离)最小的点或边。

输入格式

nn。然后 n1n-1 条边 (u,v,w)(u, v, w)

输出格式

核的位置(边的编号或点的编号)和最小偏心距。

输入样例

3 2
1 2
2 3

输出样例

2

提示

  • 先求树的直径(两次DFS/BFS)。
  • 在直径上用双指针/二分找到偏心距最小的位置。
  • 需要预处理每个节点到直径两端的最短距离。

"核找到了。"你说。

"24号位置。"Echo说,"Zero的心脏。"

"我们打不打?"CC问。

"不打。"你说,"我们绕过去。心脏太明显,周围的守卫也最多。"

"那我们去哪?"

"去尾巴。"Echo说,"直径的最末端。那里最安静。"

[第五题:丈量涟漪]

在线编程 IDE

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