圆方树(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