昨天做另一道题连通问题死活过不了,今天对照拿着通过的代码逐字符对照才发现原来是算法有问题,来翻一下洛谷的代码,居然犯了同样的错误,还AC了。题目特殊,不用判断,还是数据不够强的原因?
void tarjan(int u)
{
dfn[u] = low[u] = ++cnt;
st.push(u);
ins[u] = 1;
for (int i = 0; i < g[u].size(); i++)
{
int v = g[u][i];
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])
{
++color;
int x;
do
{
x = st.top();
st.pop();
ins[x] = 0;
cl[x] = color;
num[color]++;
} while (x != u);
}
}