图论1——先从树讲起

图论1——先从树讲起

目录

Part01 树是什么
Part02 树的重心
Part03 树的直径

Part01树是什么

一棵大树拔地而起,带来了春天的生机。
你说得对,但这是生物学意义上的树。
一个没有固定根结点的树称为无根树。
在无根树的基础上,指定一个结点称为根,就是一棵有根树。

Part02树的重心

树的重心指的是,对于树上的所有点,当一个点删除以后,他每一个子树的节点数的最大值的最小值。
设对于第 \(i\) 个点,它删除以后各个子树节点数的最大值为 \(mx_i\),树的重心就是 \(\min mx_i\) 所在的 \(i\) 点。
树的重心有很多性质。以下列出了最常用的几条:

树的重心——1

树的重心的所有子树的大小都不超过 \(\frac{n}{2}\)

树的重心——2

树中所有点到某个点的距离和中,到重心的距离和是最小的。

树的重心——3

把两棵树通过一条边相连得到一棵新的树,那么新的树的重心在连接原来两棵树的重心的路径上。

Part03树的直径

树的直径的定义:树上任意两节点之间最长的简单路径即为树的直径。
树的直径的三种求法:

第一种求法——两遍dfs

选择任意一个节点 \(a\),从 \(a\) 开始 \(dfs\) 找到离 \(a\) 最远的点,记为 \(z\),再从 \(z\) 点开始遍历,找到离 \(z\) 点最远的点,即为 \(y\),则 \(y,z\) 就是树的一条直径。
这里要注意,当树上存在负边权时,不能使用该方法求树的直径。

第二种求法——自底向上树上dp

\(dp_u\)\(u\) 出发的最长路径。转移方程易得:\(dp_u=\max(dp_u,dp_v+w)\)。其中 \(v\)\(u\) 点的子节点,\(w\)\(u,v\) 边的权重。
答案可以这么记录。记录 \(d\) 为答案,每次枚举到一个子节点 \(v\),在 \(dp\) 转移前,\(d=\max(d,dp_u+dp_v+w)\),定义同上。

第三种求法——自顶向下树上dp

记录每个节点作为子树的根向下,能够延伸的最长路径 \(d1\) 和次长路径 \(d2\)。答案就是 \(d=\max(d,d1+d2)\)

posted @ 2025-08-18 16:46  little_Cabbage  阅读(26)  评论(0)    收藏  举报