社区讨论
关于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 条回复,欢迎继续交流。
正在加载回复...