void tarjan(int x){
low[x]=dfn[x]=++cnt,vis[x]=1;
st.push(x);
for(int i=head[x],v;i;i=edge[i].nxt){
v=edge[i].tar;
if(!dfn[v]){
tarjan(v);
low[x]=min(low[x],low[v]);
}
else if(vis[v])
low[x]=min(low[x],dfn[v]);
}
if(dfn[x]==low[x]){
int y;
while(!st.empty()){
y=st.top(),scc[y]=x,vis[y]=0,siz[x]++;
st.pop();
if(x==y)
break;
}
}
return;
}
带有 here 注释那一行为什么要有后面的 if(vis[v]) 呢?
带有 ppp 的那一行已经判断过是否走过了啊?