tarjan演算法 連通分量

2021-09-25 20:33:36 字數 747 閱讀 5509

tarjan演算法:

1:low[maxn]:乙個節點的dfn值=同乙個連通分量中這個節點可以回到的最小時間戳

2:dfn[maxn]:按照dfs的順序訪問到該節點的時間戳

3:對乙個節點來講:

1:如果沒有被訪問過,即先對其遞迴呼叫tarjan函式,然後計算這個節點的上乙個節點,即這條邊的from節點的low,這裡要注意一下這是乙個回溯的過程,因為想象一下在圖中,是先一直遞迴到乙個節點沒有下乙個節點為止的,因此是先算出沒有下乙個節點的那個節點的low==dfn,一開始對乙個節點來講,本身就是乙個單獨的連通分量,也預設該節點的dfn值=同乙個連通分量中這個節點可以回到的最小時間戳,即low==dfn,然後遞迴函式的回溯過程中,其上乙個節點的low值的求法為:

if(!dfn[v])

else if(vis[v])

#include using namespace std;

const int maxn=2e5+7;

vectore[maxn];

int dfn[maxn],low[maxn],tot,n,ans=maxn,vis[maxn];

stacks;

void tarjan(int x)

}int main()

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

}cout

}

強連通分量Tarjan演算法

o v e 通常的tarjan寫法是有個dfn陣列跟乙個instack陣列,我精簡了下 把這兩個陣列都刪去了,用更簡便的寫法代替,也省了空間。int low maxn 記錄這棵樹能到達的最早祖先 其實不一定是最早,但不影響使用 int time 時間戳 int num 連通分量的個數 int bel...

強連通分量 tarjan演算法

強連通分量 tarjan演算法 有向圖強連通分量 在有向圖g中,如果兩個頂點間至少存在一條路徑,稱兩個頂點強連通 strongly connected 如果有向圖g的每兩個頂點都強連通,稱g是乙個強連通圖。非強連通圖有向圖的極大強連通子圖,稱為強連通分量 strongly connected com...

強連通分量 Tarjan演算法

有向圖強連通分量 在有向圖g中,如果兩個頂點vi,vj間 vi vj 有一條從vi到vj的有向路徑,同時還有一條從vj到vi的有向路徑,則稱兩個頂點強連通。如果有向圖g的每兩個頂點都強連通,稱g是乙個強連通圖。有向圖的極大強連通子圖,稱為強連通分量。tarjan 演算法是基於對圖優先搜素的演算法 每...