代码A:
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
if(dfn[u]<=low[v]){
++ans;int t;
do{
t=s.top();s.pop();
vt[ans].push_back(t);
}while(t!=v);
vt[ans].push_back(u);
}
}else low[u]=min(low[u],dfn[v]);
代码B:
if(dfn[v])low[u]=min(low[u],dfn[v]);
else{
tarjan(v);
low[u]=min(low[u],low[v]);
if(dfn[u]<=low[v]){
++ans;
while(s.top()!=u){
int t=s.top();s.pop();
vt[ans].push_back(t);
}
vt[ans].push_back(u);
}
}
其他部分代码相同,两份代码出自不同的教练。但代码A全部AC,代码B基本全WA,主要区别就在于存双联通分量的方式,求大佬来解答下这两种写法有什么区别,为什么代码B会全WA?