图论强连通分量
Posted brokenstring
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图论强连通分量相关的知识,希望对你有一定的参考价值。
这里给出一个dalao炒鸡详细的解释:
https://www.cnblogs.com/stxy-ferryman/p/7779347.html#4073877
Tarjan算法
void Tarjan(int u) { dfn[u]=low[u]=++num; st[++top]=u;//入栈 vis[u]=1;//判断是否在栈中 for(int i=h[u];i;i=e[i].next) { int v=e[i].to; if(!dfn[v]) { Tarjan(v); low[u]=min(low[u],low[v]);//low表示u与其子孙到达的最小编号 } else if(vis[v])//判断v是否在栈中 low[u]=min(low[u],dfn[v]); //可以改成 min(low[u],low[v]) //因为此时v的low和dfn还未修改 } if(dfn[u]==low[u]) { co[u]=++col;//属于第col个强连通分量 while(st[top]!=u) { co[st[top]]=col; vis[st[top--]]=0; } --top; } }
可用于缩点求在DAG上问题
以上是关于图论强连通分量的主要内容,如果未能解决你的问题,请参考以下文章