10.13 NOTE

国庆QBXT Day4 图论补课

Tarjan系列:割点,割边,强连通分量

CSDN好文章

对Tarjan的理解+++!

基本定义

割点 若删除一个结点后,整张图变得不连通,则称这个点是割点。
割边 与割点同定义,点换成了边。
强连通分量 对于一个连通块内的任意两个结点互相可达。

求法

还是Tarjan。

再次强调重要定义
dfn[i] 表示 dfs 序
low[i] 表示结点 i 与其子孙通过回边/横插边能够访问到的最小 dfn

求割点
对于一条树边 \((u,v)\) ,若 \(low[v]>=dfn[u]\),也就是说 v 能够访问到的最小 dfn 至少是 u 了,则点 \(u\) 是割点(因为 \(v\) 无法不经过 \(u\) 而访问到 \(u\) 的祖先)。

注意: 对于根节点,若子树个数不少于 \(2\),则根节点也是一个割点。

求割边
对于一条树边 \((u,v)\) ,若 \(low[v]>dfn[u]\),也就是说 \(v\) 直接无法访问 \(u\),则这条边是割边。

在无向图内求割点割边时,能够访问一个结点的条件是这个结点未被访问过。

求强连通分量
用一个栈来维护当前已经 DFS 到的结点,回溯时若发现对于一个结点 \(u\)\(dfn[u]==low[u]\),则说明 \(u\) 是这个强连通分量的“根”。

在有向图内求强连通分量的时候,使用栈来暂时存储已访问的结点的原因是:避免因横插边而走向另一个已经访问完的强连通分量。

树上问题

树的重心

对于一棵树 \(S\),删去一个点,使得剩下所有的连通分量大小不超过这棵树大小的一半(下取整)。

求法
DFS 更新每个结点为根的子树的大小,并在每次 DFS 到一个新的结点时更新该节点拥有的最大的子联通分量。
注意: 对于不属于这个结点的子树的,可以用整棵树的大小减去这颗子树的大小计算。

拓展:点集重心

还是一棵树,给定一个点集 \(S\),重心的定义与树的重心类似,但重心是在这棵树上的。

性质: 对于一个点集,它的重心一定是点集内所有点 \(dfn\) 中位数的祖先。
求法: \(dfn\) 用树状数组维护即可。

树的直径

定义: 对于一棵树,树上任意两点最简路径的最大值就是这棵树的直径。

求法: 两次 DFS 或树形 DP。树形 DP 维护对于一颗子树的最大深度和次大深度,那么这颗子树的直径就是最大深度与次大深度之和。

posted @ 2025-11-13 23:55  Amiyawasdonkey  阅读(0)  评论(0)    收藏  举报