社区讨论

关于Tarjan的问题

P4320道路相遇参与者 4已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lobpaqo4
此快照首次捕获于
2023/10/30 00:44
2 年前
此快照最后确认于
2023/11/04 05:24
2 年前
查看原帖
CPP
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分,可是我觉得是一样的,有大佬可以解惑吗

回复

5 条回复,欢迎继续交流。

正在加载回复...