求助求助
查看原帖
求助求助
743014
_H17_楼主2024/7/11 22:01

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]){//ppp
			tarjan(v);
			low[x]=min(low[x],low[v]);
		}
        else if(vis[v])//here
            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 的那一行已经判断过是否走过了啊?

2024/7/11 22:01
加载中...