其他分享
首页 > 其他分享> > 圆方树(tarjan点双联通分量)

圆方树(tarjan点双联通分量)

作者:互联网

板子
int low[N],dfn[N],stk[N],tp,dfn_cnt;
void tarjan(int u,int fa)
{
    dfn[u]=low[u]=++dfn_cnt;
    for(rint i=head[u];i;i=e[i].nxt)
    {
        int v=e[i].to;
        if(v==fa)continue;
        if(!dfn[to])
        {
            tarjan(v,u);
            low[u]=min(low[u],low[v]);
            if(low[v]>=dfn[u])
            {
                fang++;
                while(1)
                {
                    int xi=stk[top--];
                    Add_circle_tree(xi,fang);
                    Add_circle_tree(fang,xi);
                    if(xi==v)break;
                }
                Add_circle_tree(fang,u);
                Add_circle_tree(u,fang);
            }
        }
        else low[u]=min(low[u],dfn[v];)
    }
}

 树上圆点仅会和方点相连,方点仅会和圆点相连。  圆方树的节点个数为线性。

标签:tarjan,xi,点双,fang,int,Add,dfn,low,圆方树
来源: https://www.cnblogs.com/403caorong/p/16524648.html