萌新刚学 tarjan,有一步不是很懂。
for(int i=0;i<G[x].size();i++)
{
int q=G[x][i];
if (!dfn[q])
{
tarjan(q);
low[x]=min(low[x],low[q]);
}
else if (vis[q]) low[x]=min(low[x],dfn[q]);
}
为什么第一次要 low[x]=min(low[x],low[q]),第二次要 low[x]=min(low[x],dfn[q]) 啊?
教练说是要避免横岔边而影响答案,但还不是很懂。
有没有神仙给个 Hack 数据或者详细解释啊/ll