強連通分量是指有向圖g裡頂點間能互相到達的子圖
即在這個子圖中每個頂點直接或間接地連線。
tarjan
演算法:規定乙個陣列dfn[i]記錄第一次訪問到i的時間,並將i入棧,然後low[i]記錄該點所在的強連通子圖所在搜尋子樹的根節點的dfn值,又搜尋子樹中越靠前的dfn值越小,所以要盡量找小的dfn值。
偽**:
tarjan(u)
注意:由於一張圖中可能有多個強連通分量,所以需要做多次tarjan操作。
將tarjan求得之後,可以將同一強連通分量看作乙個點,那麼就可以得到一張有向無環圖(dga圖),在有些題目中可以用到。
求強連通分量**:
#include int n,m,first[10010],arraynum,strack[10010],top,in[10010],flag[10010];
int dfn[10010],low[10010],time,ans[10010],cont,js[10010];
struct ppparray[100010];
int min(int x,int y)
} for(i=1;i<=n;i++)
}
tarjan演算法詳解
參考 tarjan演算法在強連通分量分離中運用很廣,書寫簡單,並且可以拓展到圖的割點,割邊上,十分強大 具體思路 令dfn u 表示當前點的時間戳 low u 表示當前點所能到達的點的時間戳中最小的乙個 到達點u時,將其入棧 拓展點u後代 當且僅當dfn u low u 時,棧頂元素全部出棧,此時出...
Tarjan 演算法筆記
tarjan演算法 tarjan演算法屬於圖論中的乙個演算法,主要用來求乙個圖中的強連通分量,之後就可以做很多事,比如說縮點 求雙聯通分支等。強連通 在乙個有向圖中,對於幾個點,如果它們能夠互相到達,那麼稱它們強連通。強連通分量 可以這樣理解 把乙個圖里的點分成幾坨,每坨中的點都能夠互相到達 他們強...
Tarjan演算法詳解
tarjan演算法的用途 1.求橋和割點 2.求點和邊的雙連通分量 3.求強連通 targan演算法的流程 利用dfs來遍歷圖來構建一種數型的結構 tarjan演算法的兩個核心陣列 1 對於第一種用途 tarjan演算法原理 我們從1開始遍歷,發現6,5,4的low不小於dfn 3 故3為割點 即4...