强连通分量(缩点,tarjan)(无讲解)

void tarjan(int u) {
	low[u]=dfn[u]=++dfstim;
	st[++top]=u;
	for(rint i=head[u];i;i=e[i].nxt) {
		int v=e[i].to;
		if(!dfn[v])tarjan(v),low[u]=min(low[u],low[v]);
		else if(!scc[v])low[u]=min(low[u],dfn[v]);
	} 
	if(low[u]==dfn[u]) {
		++C,scc[u]=C;
		while(st[top]!=u)scc[st[top--]]=C;
		--top;
	}
}

猜你喜欢

转载自www.cnblogs.com/zzctommy/p/12957780.html