【学习笔记】Tarjan
【学习笔记】Tarjan
一个表格搞懂tarjan所有易错点

边双联通分量
int n,m,tp=0,num=0,cnt=0;
int stk[N<<1],bcc[N],low[N],dfn[N];
bool ins[N];
void tarjan(int u,int f){
dfn[u]=low[u]=++cnt;
stk[++tp]=u;
ins[u]=1;
int cx=0;//cx此题无用,见头文件前批注
for(auto v:G[u]){
if(v==f && ++cx==1) continue;
if(!dfn[v]) tarjan(v,u);
low[u]=min(low[u],low[v]);
}
if(low[u]==dfn[u]){
++num; int x;
do{
x=stk[tp--];
bcc[x]=num;
ins[x]=0;
}while(x!=u);
}
}

浙公网安备 33010602011771号