【学习笔记】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);
	}
}
posted @ 2024-02-19 17:14  superl61  阅读(8)  评论(0)    收藏  举报