这道题数据弱了吗?求解答
查看原帖
这道题数据弱了吗?求解答
310995
SAXYAM楼主2021/7/29 20:41

昨天做另一道题连通问题死活过不了,今天对照拿着通过的代码逐字符对照才发现原来是算法有问题,来翻一下洛谷的代码,居然犯了同样的错误,还AC了。题目特殊,不用判断,还是数据不够强的原因?

void tarjan(int u) // tarjan算法
{
    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);
    }
}
2021/7/29 20:41
加载中...