constint maxn=5010
;const
int maxm=2500000
;struct
edge
edge[maxm];
inthead[maxn],tot;
intlow[maxn],dfn[maxn],stack[maxn],belong[maxn];
intindex,top;
intscc;
bool
instack[maxn];
intnum[maxn];
void addedge(int u,int
v)void tarjan(int
u)
else
if(instack[v]&&low[u]>dfn[v])
low[u]=dfn[v];
}if(low[u]==dfn[u])
while(u!=v);
}}void solve(int
n)//n代表點的個數,點的標號從1到n,最後得到的結果在belong陣列中,記錄的是改點屬於的強聯通分量的標號,scc代表強聯通分量的個數
}void
init()
tarjan求強聯通分量
變數含義說明 pre i i點的被訪問的時鐘編號,被分配後保持不變 low i i點能訪問的最先的點的時鐘編號,隨子節點改變 scc no i i點所在的強聯通分量的編號 dfs clock 時鐘序號,每訪問乙個新的點時都增長1 scc cnt 強聯通分量的編號 棧stk 每訪問乙個節點都壓入棧中他...
Tarjan演算法 強聯通分量
1 基礎知識 在有向圖g,如果兩個頂點間至少存在一條路徑,稱兩個頂點強連通 strongly connected 如果有向圖g的每兩個頂點都強連通,稱g是乙個強連通圖。非強連通圖有向圖的極大強連通子圖,稱為強連通分量 strongly connected components 下圖中,子圖為乙個強連...
強聯通分量 tarjan
tarjan演算法思想 dfs節點的時候,用time記錄訪問順序,則父節點會先於子節點訪問。那麼節點u遞迴的過程中找到了父節點 先訪問的 形成乙個環路,這個環路上的所有節點就是乙個強聯通分量。low的作用是用強聯通分量上的最先訪問的節點 訪問到的父節點 得time作為整個強聯通分量所有節點的時間。並...