1. 程式人生 > 其它 >無向圖的連通性相關

無向圖的連通性相關

無向圖的割點和橋

\(\\\)

概念

對於\(x\epsilon V\),從圖中刪去節點\(x\)以及所有與\(x\)關聯的邊後,\(G\)分裂成兩個或兩個以上不相連的子圖,則稱\(x\)\(G\)的割點。

若對於\(e\epsilon E\),從圖中刪去邊\(e\)之後,\(G\)分裂成兩個不相連的子圖,則稱\(e\)\(G\)的橋或割邊。

一般無向圖(不一定聯通)的“割點”和“橋”就是它的各個連通塊的“割點”和“橋”。

\(\\\)

tarjan演算法

\(O(v+e)\)的時間複雜度求出無向圖的割點和橋以及雙連通分量。

割邊判定法則

無向邊\((x,y)\)是橋,當且僅當搜尋樹上存在\(x\)

的一個子節點\(y\),滿足\(dfn[x]<low[y]\)

割點判定法則

\(x\)不是搜尋樹的根節點,則\(x\)是割點當且僅當搜尋樹上存在\(x\)的一個子節點\(y\)滿足\(dfn[x]\le low[y]\)

\(x\)是搜尋樹的根節點,則存在至少兩個子節點\(y_1,y_2\)滿足上述條件。

\(\\\)

一些題目

礦場搭建

通過手模一些樣例可以發現,實際上就是求出割點後對於不同的連通塊分類討論。

記當前連通塊內的點的個數為\(n\)

  • 如果這個連通塊不與任何割點相連,那麼這個連通塊內需要兩個出口

    首先可以欽定塊內的任何一點作為出口,考慮該出口沒了的情況,那麼還需要另外一個點作為出口。

    這種情況下可以作為出口的點有\(C_n^2=\frac{n\times (n-1)}{2}\)種情況。

  • 如果這個連通塊與一個割點相連,那麼這個連通塊內需要單獨的一個出口。

    如果這個割點沒了,那麼這個連通塊內的點沒有其他點與塊外的點相連。

    這種情況下可以作為出口的點有\(n\)種情況。

  • 如果這個連通塊與兩個及以上割點相連,那麼這個連通塊不需要出口

    如果其中一個割點沒了,還可以通過其它的割點與塊外的點相連。

    對答案沒有貢獻。

\(\\\)

[ZJOI2004]嗅探器

一個結論,如果存在這樣一個點,那麼這個點一定是割點,並且兩個中心伺服器位於與這個割點相連的不同兩個連通塊中。

沒調過……

\(\\\)

\(\\\)

無向圖的雙連通分量

\(\\\)

概念

若一張連通圖不存在割點,則稱它為“點雙連通圖”。

若一張連通圖不存在割邊,則稱它為“邊雙連通圖”。

點雙連通分量(v-DCC)是指這張無向連通圖中不存在包含它且比它更大的點雙連通子圖。

邊雙連通分量(e-DCC)是指這張無向連通圖中不存在包含它且比它更大的邊雙連通子圖。

\(\\\)

Tarjan演算法

點雙連通分量判定法則

  • 圖的頂點數量不超過\(2\)
  • 圖中任意兩點都同時包含在至少一個簡單環中。

滿足兩個條件的其中一個即可。

邊雙連通分量判定法則

圖中任意一條邊都包含在至少一個簡單環中。

\(\\\)

一些題目

Network

首先求出原圖中所有的邊雙連通分量,然後對於所有的邊雙連通分量縮點,建出新的縮點圖。

此時縮點圖中所有的邊就是原圖所有的橋邊。

後面所有的加邊操作都在縮點圖上進行。

如果這條邊的兩個端點在一個v-dcc裡,那麼這條邊既不會增加橋邊,又不會減少橋邊,可以忽略。

這條邊最多隻會與v-dcc裡的邊形成簡單環,然而v-dcc裡面的邊已經不是橋邊了,故它自己不會成為橋邊,也不會減少橋邊。

如果這條邊的兩個端點在兩個v-dcc裡,那麼縮點圖上兩個端點之間的邊都不再是橋邊。

這條邊會與兩個端點之間的邊形成簡單環,那麼這些邊就都不是橋邊了。

此時,並不需要實際把這條邊建出來。

考慮如果需要把這條邊建出來的話,一定是這條邊在之後可能形成橋邊,或者是讓之後加的邊成為橋邊。首先,這條邊已經與兩個端點之間的路徑形成了一個簡單環,它自己永遠不可能成為橋邊了。同理,之後新增的邊也一定會與它兩個端點之間的路徑形成簡單環,也不可能成為橋邊。

將兩個端點之間的路徑看成這兩個端點到\(lca\)的路徑拼起來。也就是說,預先處理出\(lca\),將\(x\)\(lca\)路徑上所有的橋邊都改為非橋邊,將\(y\)\(lca\)路徑上所有的橋邊也都改為非橋邊。

code

\(\\\)

Knights of the Round Table

咕咕咕