【学习笔记】圆方树
园方树
前置知识-点双连通分量
点双连通图:图中任意两不同点之间,都有至少两条点不重复的路径。
“点不重复”指两条路径的交集为空(不考虑出发点和终点)。
而一个图的 点双连通分量 则是一个 极大点双连通子图。
所以每一条边 恰属于一个 点双,每一个点属于 至少一个 点双。
定义
园方树 是一种用来将一个无向连通图变成一棵树的数据结构。
在圆方树中,原来的每个点对应一个 圆点,每一个点双对应一个 方点。
所以共有 \(n+c\) 个点,其中 \(n\) 是原图点数, \(c\) 是原图点双连通分量的个数。
性质: 每一条边连接一个圆点和一个方点。
下面的图显示了一张图对应的点双和圆方树形态。
实现
- 用 Tarjan 算法找点双连通分量
- 在找到一个点双后,在向外弹栈的同时,新建一个 方点,并将原树上的点作为 圆点 和它连边。
注意,犹豫对于每个点 \(u\),它可能属于多个点双,所以当 \(dfn_u = low_v\) 时,只将 \(v\) 以及它在 DFS 树上的子树中的点弹栈。

浙公网安备 33010602011771号