欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
S42604.26-4 倍增里程
26-4 倍增里程
倍增里程
秘藏选取完了,但Echo-0的系统需要计算里程——倍增的里程。
"里程?"CC问。
"对。"你说,"一棵树,每个节点到其他节点的距离。求某个节点的最远节点距离。"
"最远?"
"对。"你说,"从出发,能走到的最远距离。"
"咋算?"
"两次DFS。"你说,"第一次从任意点出发,找最远点;第二次从出发,找最远点。到就是直径。"
"直径?"
"对。"你说,"树中最长的路径。"
"每个点呢?"
"对。"你说,"每个点到直径两个端点的最大距离,就是它的最远距离。"
"第47个节点。"你说,"到的距离100,到的距离80——最远距离是100。"
"为啥?"
"因为从出发的最远点,一定是直径的某个端点。"你说,"这是树的性质。"
"性质?"
"对。"你说,"树的直径有一个好性质——任意点的最远点,必是直径端点之一。"
"像圆?"
"对。"你说,"像圆——直径是最长的弦,任意点到圆周的最近点在直径上。"
"树不是圆。"
"对。"你说,"但性质类似——直径是树的'中心线'。"
"中心线?"
"对。"你说,"所有路径都绕着它。"
CC看着那棵树——像一个家族,像一个网络,像某种有中心的东西。
"中心在哪?"她问。
"直径的中点。"你说,"如果是点,就是重心。"
"重心?"
"对。"你说,"删掉重心后,每棵子树大小不超过。"
"平衡?"
"对。"你说,"重心让树平衡——不会一边太大。"
Echo把里程表投射出来——每个节点到最远的距离,像光环,像领地。
"以前我不知道多远。"她说,"现在……知道了。"
"因为你在量。"CC说。
"对。"Echo说,"因为我在量。
题目描述
给定一棵树,求每个节点到最远节点的距离。
输入格式
第一行。接下来行,每行一条边和长度。
输出格式
行,第行表示节点的最远距离。
输入样例
10
4 5 6 1 2 3 7 8 9 10
7
10
1 7
2 7
3 7
4 7
5 7
6 7
7 7
8 7
9 7
10 7
输出样例
2
3 2
2 4
2 1
2 4
5 1
5 1
2 1
2 0
0 0
0 0
提示
- 求直径:两次DFS/BFS。
- 每个点的最远距离。
- 时间复杂度。
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |