余思洁 发表于 2025-9-28 17:59:46

图论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)\)。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 图论1——先从树讲起