关于Tarjan的问题
查看原帖
关于Tarjan的问题
109220
Farkas_W楼主2021/9/29 09:40
il void Tarjan(int x)
{
	dfn[x]=low[x]=++cnt;s.push(x);
	for(re i=e1.head[x],y;i,y=e1.go[i];i=e1.nxt[i])
	{
		if(!dfn[y]){
			Tarjan(y);low[x]=min(low[x],low[y]);
			if(low[y]>=dfn[x]){
				e2.Add(++num,x);
				while(1){
					int p=s.top();s.pop();
					e2.Add(num,p);
					if(p==y)break;
				}
				/*
				while(s.top()!=x){
					e2.Add(num,s.top());
					s.pop();
				}
				*/
			}
		}
		else low[x]=min(low[x],dfn[y]);
	}
}

注释外的while循环是对的,注释内的只有35分,可是我觉得是一样的,有大佬可以解惑吗

2021/9/29 09:40
加载中...