Tarjan求割点和割边
强连通分量:
若图
G
G
G 中的点两两可达,则称图
G
G
G 为强连通。
强连通分量的定义:极大的强连通子图。
割点:
在一个无向连通图图中,删掉顶点
u
u
u 及其相连的边以后,这个图不连通,点
u
u
u 为此图割点。
重连通图:
1.一个不含割点的连通图称为重联通图。
2.对于重联通的无向图来说,每对顶点至少存在两条路径。
3.在网络通信中,图中不应该有割点。
求割点:
1.暴力判断图连通性,
O
(
n
(
n
+
e
)
)
O(n(n+e))
O(n(n+e)) 。
2.用Tarjan寻找割点时间复杂度为
O
(
n
+
e
)
O(n+e)
O(n+e) 。
Tarjan:
首先
d
f
s
dfs
dfs 寻找一颗无向连通图
d
f
s
dfs
dfs 遍历后形成的深度优先生成树。
在深度优先生成树中的某个顶点
u
u
u 要么是根,要么不是根:
1.若顶点 u u u 为生成树的根:
1.1充要条件:
u
u
u 是割点的充要条件:
u
u
u 有两颗或以上的子树。
1.2判定:以
u
u
u 相连其中一个顶点
d
f
s
dfs
dfs 遍历,若能遍历完,则
u
u
u 不为割点
2.若顶点 u u u 不为根节点:
2.1充要条件:设 v v v 为 u u u 的一个孩子, u u u 是割点的充要条件:在 v v v 或 v v v 的子孙节点和 u u u 的祖先的节点之间不存在任何回边。
2.2判定条件:
2.2.1声明:
d
f
n
i
dfn_{i}
dfni 为第
i
i
i 个点的
d
f
s
dfs
dfs 序。
l
o
w
i
low_{i}
lowi 为第
i
i
i 个点出发能到达的点(双亲除外)的最小深度优先数,定义为:
l
o
w
u
=
min
(
d
f
n
u
,
min
(
l
o
w
v
∣
v
是
u
的
孩
子
)
,
min
(
d
f
n
v
∣
在
生
成
树
,
(
u
,
v
)
是
一
条
回
边
)
)
low_{u}=\min(dfn_{u},\min(low_v|v是u的孩子), \min (dfn_v|在生成树,(u,v)是一条回边))
lowu=min(dfnu,min(lowv∣v是u的孩子),min(dfnv∣在生成树,(u,v)是一条回边))
2.2.2定理:
在
u
u
u 不是深度优先生成树的根的前提下,若
u
u
u 存在一个孩子
v
v
v 使得
d
f
n
u
≤
l
o
w
v
dfn_{u} \le low_{v}
dfnu≤lowv 成立,则
u
u
u 是割点(若
d
f
n
u
>
l
o
w
v
dfn_{u}> low_{v}
dfnu>lowv ,则证明以
v
v
v 为根节点的子树中必有一个节点与
u
u
u 的祖先相连,则
u
u
u 必定不是割点)。
求割边(桥):
1.割边定义:
当一个无向连通图
G
G
G 删去一条边
e
e
e 后剩下的点不能两两到达,则边
e
e
e 为图
G
G
G 的割边(即
G
−
e
G-e
G−e 不为连通图)。
2.求割边:
2.1定理:若边
(
u
,
v
)
(u,v)
(u,v) 为割边,则点
u
u
u 和点
v
v
v 为割点,若点
u
u
u 和点
v
v
v 为割点,边
(
u
,
v
)
(u,v)
(u,v) 不一定为割边。
2.2求解:假设当前求解的边为
(
u
,
v
)
(u,v)
(u,v) ,且
d
f
n
u
<
d
f
n
v
dfn_{u}<dfn_{v}
dfnu<dfnv (即点
v
v
v 为点
u
u
u 的儿子),若点
v
v
v 或点
v
v
v 的子孙节点有一条连向
u
u
u 的祖先的边,则边
(
u
,
v
)
(u,v)
(u,v) 不为割边,否则边
(
u
,
v
)
(u,v)
(u,v) 为割边,即:
l
o
w
v
>
d
f
n
u
−
−
>
边
(
u
,
v
)
为
割
边
low_{v} >dfn_{u}-->边(u,v)为割边
lowv>dfnu−−>边(u,v)为割边