BCC and SCC,使用 Tarjan 來求取。
BCC
一張無向圖上,不會產生關節點 (articulation point) 的連通分量,稱作「雙連通分量」(Biconnected Component)。
一張無向圖上,不會產生橋 (bridge) 的連通分量,稱作「橋連通分量」(Bridge-connected Component)。
Bridge-connected Component 模板
|
|
Biconnected Component 模板
stack 塞入邊而不是塞入點,這樣就可以在找到 articulation point 時,得到每個團的資訊。
驗證:POJ 3177 Redundant Paths
求取 BCC 後縮點。縮點後最遠的兩葉子相連可以形成一個環,這需要做 (left + 1) / 2次。可以參考照篇文章來思考。
注意重邊。
|
|
SCC
模板
in_stack 檢查可以用下圖思考。
$$
A \rightarrow B \
C \rightarrow B \
D \rightarrow C
$$
如果今天走訪順序為 $B, A, D$,沒檢查 in_stack 的話,$C$ 的 low 會變成 $B$ 的,造成 $C$ 和 $D$ 在相同 SCC,但是這是錯誤的。
|
|
驗證:POJ 2186 Popular Cows
縮 SCC 點之後,如果只有一個 DAG,那 out degree 為零的那個點就會答案,因為大家都會到達那裡!詳細解釋請看這裏。
|
|