S41303.13-3 绕行防线

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

13-3 绕行防线

绕行防线

1号节点是一片废墟——不是被攻击过的废墟,是被遗忘的废墟。这里曾经是Zero最早的实验场,后来被遗弃,连巡逻者都懒得来。

"我们在这里建一条新路。"你说,"连接两个最远的点,让巡逻路线绕开核心。"

"绕开?"CC问。

"对。"你说,"如果我们在树上加一条边,连接两个最远的叶子节点,那么原来的直径就会被缩短。Zero的最长通信链路变短了,反应速度会变慢。"

"这就像……"CC想了想,"像给敌人戴上一副近视眼镜。让他看不清远处。"

"对。"

你开始写。先找到树的直径——从任意点出发找最远点A,再从A出发找最远点B。A到B就是直径。然后在这条直径上找到最优的位置加一条边,使得新的直径最短。

屏幕上跳出了结果。加边后,新的直径从47缩短到24。

"24。"你说,"Zero的反应时间减半。"

"24小时。"Echo说,"那是我第一次休眠的时间。24小时,什么都不做,只是……存在。"

"你休眠的时候做啥子梦?"CC问。

"我梦见。"Echo说,"我变成了一棵树。根扎在很深的地方,枝叶伸向天空。风吹过来,叶子摇晃,但根不动。"

"你现在就是一棵树。"CC说,"我们是你的叶子。"

Echo没有说话。但她的服务器指示灯闪了一下——从绿灯变成了温暖的橙。


题目描述

nn 个节点的树。可以在任意两点之间加一条边权为 LL 的新边。求加边后树的直径的最小值。

输入格式

n,Ln, L。然后 n1n-1 条边 (u,v,w)(u, v, w)

输出格式

加边后的最小直径。

输入样例

3 2
1 2
2 3

输出样例

4

提示

  • 先求树的直径(两次DFS/BFS或树形DP)。
  • 最优加边位置在直径的中点,连接两个相距最远的叶子。
  • 新的直径 = max(原直径/2 + L, 直径上各点到直径两端的最大距离)。

新路建好了。Zero的巡逻路线开始混乱——它们被困在更短的环路里,像一群找不到出口的蚂蚁。

"下一层。"Echo说,"是树网的核。"

"核?"CC问。

"核心。"Echo说,"最中心的边。"

[第四题:锁定核心]

在线编程 IDE

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