【学习笔记】圆方树

园方树

前置知识-点双连通分量

点双连通图:图中任意两不同点之间,都有至少两条点不重复的路径。
“点不重复”指两条路径的交集为空(不考虑出发点和终点)。
而一个图的 点双连通分量 则是一个 极大点双连通子图
所以每一条边 恰属于一个 点双,每一个点属于 至少一个 点双。

定义

园方树 是一种用来将一个无向连通图变成一棵树的数据结构。
在圆方树中,原来的每个点对应一个 圆点,每一个点双对应一个 方点
所以共有 \(n+c\) 个点,其中 \(n\) 是原图点数, \(c\) 是原图点双连通分量的个数。

性质: 每一条边连接一个圆点和一个方点。

下面的图显示了一张图对应的点双和圆方树形态。

实现

  • 用 Tarjan 算法找点双连通分量
  • 在找到一个点双后,在向外弹栈的同时,新建一个 方点,并将原树上的点作为 圆点 和它连边。

注意,犹豫对于每个点 \(u\),它可能属于多个点双,所以当 \(dfn_u = low_v\) 时,只将 \(v\) 以及它在 DFS 树上的子树中的点弹栈。

posted @ 2025-07-06 16:31  GuoSN0410  阅读(11)  评论(0)    收藏  举报