tarjan算法

void tarjan(int now)
{
    s.push(now);
    in[now]=1;
    dfn[now]=low[now]=++tot;///注意low也要赋初值
    for(int i=head[now];i;i=nxt[i])
    {
        if(in[to[i]])
            low[now]=min(low[now],dfn[to[i]]);
        else if(!dfn[to[i]])///这个判断可以极大程度优化时间
        {
            tar(to[i]);
            low[now]=min(low[now],low[to[i]]);
        }
    }
    if(low[now]==dfn[now])
    {
        col++;
        while(in[now])
        {
            tmp=s.top();
            s.pop();
            in[tmp]=0;
            color[tmp]=col;
        }
    }
}

 

posted @ 2021-09-10 15:51  T_X蒻  阅读(16)  评论(0编辑  收藏  举报