几个月前学的,板子会打,但是到现在都不清楚某些地方的if到底要不要加。看题解每个人写的都不一样。
比如P2860这道题
void tarjan(int u)
{
dfn[u]=low[u]=++num,s[++top]=u;
for (int e=fir[u];e;e=nxt[e])
{
if (vis[e]) continue;
vis[e]=vis[e^1]=1;
int v=to[e];
if (!dfn[v])
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else low[u]=min(low[u],dfn[v]);
}
if (dfn[u]==low[u])
{
co[u]=++col;
while (s[top]!=u) co[s[top--]]=col;
top--;
}
}
有没有人能稍微清楚地解释一下,谢谢!