From 08a3ec500cba55877b835e5bfcc2a5ccfbdad3c2 Mon Sep 17 00:00:00 2001 From: Planet6174 Date: Wed, 27 Feb 2019 16:40:42 +0800 Subject: [PATCH] Update bridge.md --- docs/graph/bridge.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/graph/bridge.md b/docs/graph/bridge.md index 1c75942d..cb61f835 100644 --- a/docs/graph/bridge.md +++ b/docs/graph/bridge.md @@ -6,7 +6,7 @@ ### 如何实现? -如果我们尝试删除每个点,并且判断这个图的连通性,那么复杂度会特别的高。所以要介绍一个常用的算法: $Tarjan$ 。 +如果我们尝试删除每个点,并且判断这个图的连通性,那么复杂度会特别的高。所以要介绍一个常用的算法: Tarjan 。 首先,我们上一个图: @@ -24,13 +24,13 @@ 例如 2 的话是 1,5 和 6 是 3。 -然后我们开始 $DFS$ ,我们判断某个点是否是割点的根据是:对于某个顶点 $u$ ,如果存在至少一个顶点 $v$ ( $u$ 的儿子),使得 $low_v>=num_u$ ,即不能回到祖先,那么 $u$ 点为割点。 +然后我们开始 DFS,我们判断某个点是否是割点的根据是:对于某个顶点 $u$ ,如果存在至少一个顶点 $v$ ($u$ 的儿子),使得 $low_v>=num_u$ ,即不能回到祖先,那么 $u$ 点为割点。 另外,如果搜到了自己(在环中),如果他有两个及以上的儿子,那么他一定是割点了,如果只有一个儿子,那么把它删掉,不会有任何的影响。比如下面这个图,此处形成了一个环,从树上来讲它有 2 个儿子: ![](images/bridge3.png) -我们在访问 1 的儿子时候,假设先 $DFS$ 到了 2,然后标记用过,然后递归往下,来到了 4,4 又来到了 3,当递归回溯的时候,会发现 3 已经被访问过了,所以不是割点。 +我们在访问 1 的儿子时候,假设先 DFS 到了 2,然后标记用过,然后递归往下,来到了 4,4 又来到了 3,当递归回溯的时候,会发现 3 已经被访问过了,所以不是割点。 更新 `low` 的伪代码如下: @@ -121,6 +121,6 @@ int main() { 和割点差不多,只要改一处: $low_v>num_u$ 就可以了,而且不需要考虑根节点的问题。 -割边是和是不是根节点没关系的,原来我们求割点的时候是指点 $v$ 是不可能不经过父节点 $u$ 为回到祖先节点(包括父节点),所以顶点 $u$ 是割点。如果 $low_v==num_u$ 表示还可以回到父节点,如果顶点 $v$ 不能回到祖先也没有另外一条回到父亲的路,那么 $u-v$ 这条边就是割边 +割边是和是不是根节点没关系的,原来我们求割点的时候是指点 $v$ 是不可能不经过父节点 $u$ 为回到祖先节点(包括父节点),所以顶点 $u$ 是割点。如果 $low_v==num_u$ 表示还可以回到父节点,如果顶点 $v$ 不能回到祖先也没有另外一条回到父亲的路,那么 $u-v$ 这条边就是割边。 - $Tarjan$ 算法还有许多用途,常用的例如求强连通分量,缩点,还有求 $2-SAT$ 的用途等。 + Tarjan 算法还有许多用途,常用的例如求强连通分量,缩点,还有求 2-SAT 的用途等。 -- 2.11.0