Tarjan縮點 邊雙 點雙

2022-06-16 09:54:11 字數 2553 閱讀 5050

目錄:1.「poj 3694」network

2.「2019 icpc 橫濱站」

3. p3225 [hnoi2012]礦場搭建

4. 一本通 分離的路徑

所以其實就三個玩意

1.dfn,low,indx

2.stacks,bool pd

3.scc,scnt,col等我們要求的資訊

變數名 用處

dfn 記錄當前已經訪問了幾個節點

scc 記錄當前已經有了幾個強連通分量

dfn[ maxn ] 當前節點是第幾個被訪問到的

low[ maxn ] 當前節點所能訪問到的最小的 dfn[ ]

scc[ maxn ] 記錄各個節點所屬於的強連通分量編號

s[ maxn ] 儲存可能構成強連通分量的節點的棧

top 儲存棧頂

那麼我們如果要求scc這樣乙個東西,應該是用什麼結構呢?

思想其實並不是很難,就是我們要求scc,將它放入dfs序中,發現它有一定的特點,那就是在搜尋樹中的點,一定可以通向祖先,那他們就是乙個scc,因為他們可以彼此到達。

所以我們要找最大的scc,那麼就是要求出最小的祖先。

所以每個節點不用存下所有祖先,而只用存這乙個就夠了。

所以有了low來存x的搜尋樹內邊和最小的點。

那麼肯定是要dfs的。

發現low=min(low[son]),min(dfn[to]);

所以dfs回溯遞迴處理,該問題具有自相似性。

可以分為兩類

縮點之後變成了乙個dag,那麼什麼時候應該縮點呢,

例子:一旦我們逮捕了乙個間諜,他手中掌握的情報都將歸我們所有,這樣就有可能逮捕新的間諜,掌握新的情報。

給定乙個 n 個點 m 條邊有向圖,每個點有乙個權值,求一條路徑,使路徑經過的點權值之和最大,允許多次通過同乙個點和邊。

從s到t,可以重複走,求所有路徑中點權最大值與最小值的差。

p1407 我們已知n對夫妻的婚姻狀況,稱第i對夫妻的男方為bi,女方為gi。若某男bi與某女gj曾經交往過(無論是大學,高中,亦或是幼兒園階段,i≠j),則當某方與其配偶(即bi與gi或bj與gj)感情出現問題時,他們有私奔的可能性。不妨設bi和其配偶gi感情不和,於是bi和gj舊情復燃,進而bj因被戴綠帽而感到不爽,聯絡上了他的初戀情人gk……一串串的離婚事件像多公尺諾骨牌一般接踵而至。若在bi和gi離婚的前提下,這2n個人最終依然能夠結合成n對情侶,那麼我們稱婚姻i為不安全的,否則婚姻i就是安全的。

給定所需資訊,你的任務是判斷每對婚姻是否安全。

總結 :可以重複走,有傳遞性(即乙個接乙個)

1.dag 一定存在乙個或多個入度為0或出度為0的點。

2.可以進行拓撲排序,排序靠後的點不可能到達靠前的點。

3.dag上的dp(期望等)

4.把入度為0的點與出度為0的點之間連邊,會變成乙個scc

點雙連通:刪去任何乙個點仍然連通

邊雙連通:刪去任何一條邊仍然連通

(下面會簡稱為「點雙和邊雙」)

另一種定義是,任何兩點之間至少存在兩條不經過相同中間點(邊)的路徑
如果不滿足雙連通性

割點(割頂):刪去後原圖不連通的頂點集合

點雙連通:刪去任何乙個點仍然連通

邊雙連通:刪去任何一條邊仍然連通

割邊(橋):刪去後原圖不連通的邊集合

邊雙連通分量:刪去所有割邊,每個連通塊都是邊雙連通分量

一張圖的點雙連通分量之間可能有公共點,邊雙連通分量之間不可能有公共點(否則他們整體可以構成乙個邊雙)

滿足點(邊)雙連通性的極大子圖稱為點(邊)雙連通分量

如果一條邊左邊是乙個最大的邊雙連通子圖(邊雙),右邊是另乙個最大的邊雙連通子圖(邊雙),那麼這個邊就是沒有用的,刪去,這樣剩下的就是邊雙了

點雙與割點可能會有公共點。點雙和點雙之間可能會有公共點

割邊的兩端大多數情況下是割點,除了一邊只有乙個點的情況割邊

細節 割點

細節:「poj 3694」network

「2019 icpc 橫濱站」

p3225 [hnoi2012]礦場搭建

給出一些起點和終點,判定把無向邊確定方向之後能否滿足每乙個起點都可以走到對應的終點。

題意:對於乙個礦場可視作無向圖,現在已知任意礦場塌陷後,每乙個點可以從出口逃出,那麼最少在圖上建立幾個出口及方案數。

那麼可以發現刪去乙個點對於點雙仍然聯通,所以dfs每乙個點雙,統計點雙中有多少割點。

可以發現,如果將點雙視為點,那麼圖會變成乙個樹,如果斷掉乙個割點,相當於斷裂一條邊,所以只要在葉子節點上建立就可以了。

給出乙個無向連通圖,現在求出使每個點到其他點都有兩條完全不同的路徑最少還需要新增幾條邊。

可以發現這就是乙個邊雙,那麼對邊雙縮點,圖會變成乙個樹,那麼只要給兩個葉子節點連邊再縮點,就可以使新的樹葉子數減少二,所以共用(sum-1)/2。

注意各個題解都沒有注意到的是,如果兩個普通兩個葉子相連只能減少乙個葉子,因為如果他們的lca有兩個兒子就會在他們的lca處新增乙個葉子。所對葉子節點的選取是有要求的。

Tarjan縮點 SPFA 縮點

洛谷p3387縮點 tarjan spfa求dag上單源最短路模板題 用tarjan在原圖上求scc 縮點 用縮點之後的scc建乙個有向無環圖 scc權為此scc內所有點點權和 在新建的dag上將scc權視為邊權跑spfa 求scc 1 到scc n 的最長路即為所求答案 include inclu...

hdu 4635 Tarjan縮點 添邊

n個點m條邊的有向圖,在保證不是強連通圖的情況下最多可以新增多少條邊。1 n 1e5 1 m 1e5。1.正向思考不容易想到,逆向思考,把該有向圖變成完全圖,即n n 1 條邊,在不減少原有的m條邊內的邊的條件下最多可以減少多少條邊。最後得到乙個有兩個強連通分量的圖,記作x和y,x分量有x個點,y分...

Tarjan演算法 縮點

我們這一篇是在已經了解tarjan演算法的基礎之上開始寫的,如果不了解的話,請先看大牛們 關於tarjan演算法的部落格。首先我們對於乙個有向無環的圖 dag 至少新增幾條邊才能使它變為強連通圖?我們很容易根據有向無環圖的性質得到,我們計算入度為零的點數為a,出度為零的點數為b,那麼我們至少需要新增...