专栏文章

树上结论速记

个人记录参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mioi2o29
此快照首次捕获于
2025/12/02 19:33
3 个月前
此快照最后确认于
2025/12/02 19:33
3 个月前
查看原文

如何证明无边权的树上离一个点的最远点一定取在直径两个端点之一

好的,以下是 LaTeX 正常渲染的版本,避免使用 $ 包围行内公式,而是使用 \(...\),区块公式用 \[...\]

🔧 关键定义

  • 树的 直径:树中最远的两点之间的距离,设为 dd,其两个端点记为 s,ts, t,满足 dist(s,t)=d\text{dist}(s, t) = d
  • f(u)f(u):表示点 uu 到其他所有点的最远距离(即 maxvdist(u,v)\max_{v} \text{dist}(u, v))。

🧠 直观理解

在树上,从任意点 uu 出发往最远点 vv 走,最终会走到“某个角落”——也就是树的某个“最深”位置。 而直径的两个端点正是“两个最远的角落”,所以这个最远点 vv 必然是某条直径的端点。

🧾 形式化证明

设:
  • 树为 T=(V,E)T = (V, E),无边权,边长为 1。
  • 取树的直径两个端点为 s,ts, t,满足 dist(s,t)\text{dist}(s, t) 最大。

🧩 目标

我们要证明:对任意 uVu \in V,有
v{s,t} 使得 dist(u,v)=maxwVdist(u,w)\exists\, v \in \{s, t\} \text{ 使得 } \text{dist}(u, v) = \max_{w \in V} \text{dist}(u, w)
即:uu 的最远点在直径的两个端点中。

🧠 证明思路(基于 BFS 与三角不等式)

从直径的定义出发:
  1. 对任意点 uu,从 uu 开始做一次 BFS,找到最远点 vv
  2. vv 再做一次 BFS,找到它的最远点 ww。则路径 vwv \to w 是树的一条直径路径。
所以:
  • vvuu 的最远点;
  • vwv \to w 是直径路径;
  • vv 是某条直径的端点。
任意点的最远点一定是某条直径的端点
又因为树的直径是唯一最长路径,所以其端点至多只有两个(设为 s,ts, t),所以任意点的最远点一定是 sstt

✅ 举例说明

考虑如下树:
CPP
1 - 2 - 3 - 4 - 5 - 6
            |
            7
  • 树的直径是从 1 到 6,长度为 5。
  • 任意节点(如 3、4、7)的最远点一定是 1 或 6(直径端点之一)。

🔚 总结

我们已经证明:
在无边权的树上,任意点的最远点一定是某条直径的端点。
这个结论常用于树的算法设计,比如:
  • 两次 BFS 求直径;
  • 树的重心判定;
  • 树上最长路径分析等。
如果你希望我补充图论术语更完整的严谨证明(如从“无环图的路径唯一性”出发),我也可以进一步补充。
为了使节点 uueccentricity(即 maxvVdist(u,v)\max_{v\in V}\mathrm{dist}(u,v))最小,uu 必须位于某条直径路径的“中点”上。下面给出理由,并说明中点的个数。

树上,要使所有点到 u 的最长路最短,u 为什么一定是直径中点?直径中点有几个?

1. 记号与定义

  • 树为 T=(V,E)T=(V,E),无边权。
  • 直径端点记为 s,ts,t,且
    D  =  dist(s,t) D \;=\;\mathrm{dist}(s,t)
    是树的直径长度。
  • 对任意节点 uu,定义其 eccentricity
    e(u)  =  maxvVdist(u,v). e(u)\;=\;\max_{v\in V}\mathrm{dist}(u,v).
  • 我们要选取一个节点 uu^* 使得
    e(u)  =  minuVe(u). e(u^*) \;=\;\min_{u\in V} e(u).

2. 为什么最优 uu^* 在直径路径上

  1. 任何节点的最远点必在 {s,t}\{s,t\} 上一问已证明,对任意 uu
    e(u)=maxvVdist(u,v)=max(dist(u,s),dist(u,t)). e(u) =\max_{v\in V}\mathrm{dist}(u,v) =\max\bigl(\mathrm{dist}(u,s),\,\mathrm{dist}(u,t)\bigr).
  2. 因此,
    e(u)=max(dist(u,s),dist(u,t))  =  在路径 s ⁣ ⁣t 上测量到端点的最大值. e(u) =\max\bigl(\mathrm{dist}(u,s),\,\mathrm{dist}(u,t)\bigr) \;=\;\text{在路径 }s\!\to\!t\text{ 上测量到端点的最大值}.
  3. 要让这个最大值尽可能小,自然将 uu 放在路径 s ⁣ ⁣ts\!\to\!t 上,且尽量 “居中”——也就是距离 sstt 的距离都不要太大。

3. 中点的具体位置

设直径路径上的节点序列为
s=v0,v1,v2,,vD=t. s = v_0,\,v_1,\,v_2,\,\dots,\,v_D = t.
  • DD 为偶数,令 k=D/2k = D/2,则唯一本节点
    vk v_k
    即为唯一的中点,此时
    dist(vk,s)=dist(vk,t)=D2,e(vk)=D2. \mathrm{dist}(v_k,\,s) =\mathrm{dist}(v_k,\,t) =\tfrac{D}{2}, \quad e(v_k)=\tfrac{D}{2}.
  • DD 为奇数,令 k=D/2k = \lfloor D/2\rfloor,则有 两个相邻节点
    vk,  vk+1 v_k,\;v_{k+1}
    都可以使得
    max(dist(vi,s),dist(vi,t))=D2=k+1,i=k 或 k+1. \max\bigl(\mathrm{dist}(v_i,s),\,\mathrm{dist}(v_i,t)\bigr) =\Bigl\lceil \tfrac{D}{2}\Bigr\rceil =k+1, \quad i=k\text{ 或 }k+1.
    这两个节点都是最优解。

4. 结论

  1. 最优节点 uu^* 必在直径路径 st\overline{st} 的中点上。
  2. 中点的个数:
    • 若直径长度 DD 为偶数,恰有 1 个中点
    • DD 为奇数,恰有 2 个中点(它们互为邻居)。
这也正是“树的中心”(tree center)的定义:要使所有点到中心的最大距离最小,中心正好是直径的中点,且至多两个。

评论

1 条评论,欢迎与作者交流。

正在加载评论...