tarjan求橋 割頂

2022-03-10 14:52:52 字數 1163 閱讀 4086

若low[v]>dfn[u],則(u,v)為割邊。但是實際處理時我們並不這樣判斷,因為有的圖上可能有重邊,這樣不好處理。我們記錄每條邊的標號(一條無向邊拆成的兩條有向邊標號相同),記錄每個點的父親到它的邊的標號,如果邊(u,v)是v的父親邊,就不能用dfn[u]更新low[v]。這樣如果遍歷完v的所有子節點後,發現low[v]=dfn[v],說明u的父親邊(u,v)為割邊。

1

void tarjan(intx)2

12else

if(p[x]!=edge[i])//

不是父親邊才更新

13 low[x]=min(low[x],dfn[ver[i]]);

14if(p[x]&&low[x]==dfn[x]) f[p[x]]=1;//

是割邊15 }

求橋和割點的模板:

#includeusing

namespace

std;

#include

#include

#include

#define n 201vector

g[n];

intn,m,low[n],dfn[n];

bool

is_cut[n];

intfather[n];

int tim=0

;void

input()

}void tarjan(int i,int

father)

else

if(father!=k)/*

假如k是i的父親的話,那麼這就是無向邊中的重邊,有重邊那麼一定不是橋

*/low[i]=min(low[i],low[k]);

}}void

count()

}if(rootson>1

) is_cut[

1]=true

;

for(int i=1;i<=n;++i)

if(is_cut[i])

printf(

"%d\n

",i);

for(int i=1;i<=n;++i)

}int

main()

參考:poj3177-tarjan求橋/割邊

tarjan演算法--求無向圖的割點和橋

Tarjan求割點 橋

概念 1.橋 是存在於無向圖中的這樣的一條邊,如果去掉這一條邊,那麼整張無向圖會分為兩部分,這樣的一條邊稱為橋無向連通圖中,如果刪除某邊後,圖變成不連通,則稱該邊為橋。2.割點 無向連通圖中,如果刪除某點後,圖變成不連通,則稱該點為割點。割點特點 1 當前節點為樹根的時候,條件是 要有多餘一棵子樹 ...

《學習筆記》 tarjan 求割點(割頂)

go to the problem 割點 在乙個無向圖中,如果有乙個頂點集合,刪除這個頂點集合以及這個集合中所有頂點相關聯的邊以後,圖的連通分量增多,就稱這個點集為割點集合。如果某個割點集合只含有乙個頂點x 也即是乙個割點集合 那麼x稱為乙個割點。割點 給出乙個n個點,m條邊的無向圖,求圖的割點。輸...

tarjan求割點和橋(割邊)

tarjan求割點和橋 例題 割點 重要的地方在 中都有注釋 include define ll long long using namespace std const ll m 2e4 10,maxn 3e6 30 int dfn m low m tot int e m 1 k,p m k2 ve...