Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

https://www.techiedelight.com/2-vertex-connectivity-graph/
http://www.cs.rpi.edu/~goldberg/14-GT/08-block.pdf

无向图DFS

We can find Articulation points in a graph using Depth–first search (DFS).
We can say that the graph is 2–vertex connected if and only if for every vertex u in the graph, there is at least one back-edge that is going out of the subtree rooted at u to some ancestor of u. When we say subtree rooted at u, we mean all u’s descendants (excluding vertex u).
In other words, when we backtrack from a vertex u, we need to ensure that there is some back-edge from some descendant (children) of u to some ancestor (parent or above) of u.
There is an exception to this rule for the root of the tree. If the root has more than one child, then it is an articulation point; otherwise, not.

for an edge u —> v, to check whether u is articulation point or not we run DFS on v

How can we modify DFS so that we can check if there is a back-edge going out of every subtree rooted at u?
We can modify DFS such that DFS(v) returns the smallest arrival time to which there is a back edge from the subtree rooted at v (including v) to some ancestor of vertex u
“the smallest arrival time”其实即low point

二连通图上DFS的例子

二连通图上dfs树的一个例子(下图中的GLPV其实即low point)

无向图DFS树的高度bound

lower bound

https://cs.stackexchange.com/questions/12851/upper-bound-on-the-number-of-edges-relative-to-the-height-of-a-dfs-tree

Let T be a depth-first search tree of a connected undirected graph G and h be the height of T.
After running a DFS, all the edges in G can be classified as tree edges or back edges. Each back edge connects a vertex on the tree to one of it’s ancestors. For each vertex it can point to at most h−1 ancestors, thus you can have at most (h−1)|V| back edges. There are |V|−1 tree edges. You can have at most h|V|−1 edges.
therefore, |E|<=h|V|-1 ->h>=(|E|+1)/|V|

评论