码迷,mamicode.com
首页 > 其他好文 > 详细

【图论】强连通分量

时间:2018-09-21 21:14:58      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:blog   gif   isp   oid   col   图论   class   img   www   

这里给出一个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;
    }
}
View Code

可用于缩点求在DAG上问题

【图论】强连通分量

标签:blog   gif   isp   oid   col   图论   class   img   www   

原文地址:https://www.cnblogs.com/BrokenString/p/9688440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!