tarjan模板(带注释)


//dfsn[x]记录x节点有没有被访问过,有,则是第几个 
//lowlink[x]记录x能到的祖先中编号最小的
//dfs_clock是个编号累计器 
//scc记录一个 
inline void dfs_scc(int x)
{
    dfsn[x]=lowlink[x]=++dfs_clock;//访问次序标记;x能到的祖先中节点编号最小的 
    stack[++top]=x;//把走过的节点入栈 
    for(int i=0;i<e[x].size();i++)
    {
        int now=e[x][i].to;
        if(!dfsn[now])//如果没有被访问过 
        {
            dfs_scc(now);//进它 
            lowlink[x]=min(lowlink[x],lowlink[now]);//既然now是x的子节点,那么他们一定有公告的祖先,取个小的 
        } 
        else
        if(!scc[now])//如果他还没有被其他强连通分量使用 
        lowlink[x]=min(lowlink[x],dfsn[now]);//那么再小一点 
    }
    if(lowlink[x]==dfsn[x])
    {
        scc_cnt++;
        while(stack[top]!=x)//x节点在栈中夹着的节点就是强连通分量的节点 
        scc[stack[top--]]=scc_cnt;//哪一个点在当前编号为scc_cnt的强连通分量里 
        top--;
        scc[x]=scc_cnt;//一个强连通分量 
    } 
} 
全部评论

相关推荐

合适才能收到offe...:招聘上写这些态度傲慢的就别继续招呼了,你会发现hr和面试官挺神的,本来求职艰难就可能影响一些心态了,你去这种公司面试的话,整个心态会炸的。
点赞 评论 收藏
分享
03-02 08:18
集美大学 Java
钱嘛数字而已:没有赛事奖项么?另外,项目经历字有点多哈,建议突出一下重点:用的什么技术,解决什么问题,达到什么效果。
大家都开始春招面试了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务