強連通分量Tarjan演算法

2021-07-17 04:05:15 字數 599 閱讀 2448

o ( v+e )

通常的tarjan寫法是有個dfn陣列跟乙個instack陣列,我精簡了下**,把這兩個陣列都刪去了,用更簡便的寫法代替,也省了空間。

int low[maxn];      // 記錄這棵樹能到達的最早祖先(其實不一定是最早,但不影響使用)

int time; // 時間戳

int num; // 連通分量的個數

int belong[maxn]; // 記錄屬於哪個連通分量

int sta[maxn]; // 手寫棧

int top; // 棧頂

void init()

void tarjan(int p)

else if(belong[next]==-1) // 還在棧內 (只要出棧了,belong的值肯定已經確定了,這種判斷方式就省了instack陣列了)

low[p]=min(low[p],low[next]);

}if(low[p]==t)

num++;

}}void solve()

強連通分量 tarjan演算法

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

強連通分量 Tarjan演算法

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

強連通分量 tarjan求強連通分量

雙dfs方法就是正dfs掃一遍,然後將邊反向dfs掃一遍。挑戰程式設計 上有說明。雙dfs 1 include 2 include 3 include 4 include 5 6using namespace std 7const int maxn 1e4 5 8 vector g maxn 圖的鄰...