点双连通分量(模板)

    科技2022-07-16  120

    void tarjan2(LL x) { dfn[x]=low[x]=++times; s.push(x); LL child=0; if(fa[x]==-1&&g[x].size()==0){ dcc[++cnt].push_back(x); return; } for(LL i=0;i<g[x].size();i++){ LL to=g[x][i]; if(!dfn[to]) { fa[to]=x;child++; tarjan2(to); low[x]=min(low[x],low[to]); if(low[to]>=dfn[x]) { child++; if(fa[x]!=-1||child>1) ge[x]=true; cnt++; LL z; do{ z=s.top();s.pop(); dcc[cnt].push_back(z); }while(z!=to); dcc[cnt].push_back(x); } } else if(to!=fa[x]) low[x]=min(low[x],dfn[to]); } }

     

    Processed: 0.008, SQL: 8