• Tarjan


    Tarjan

    B3609 [图论与代数结构 701] 强连通分量

    std::vector<int> t[maxn]; //vector 存图
    std::vector<int> SCC[maxn];
    std::stack<int> stk;
    
    int n, m, tot, cnt;
    int vis[maxn], dfn[maxn], low[maxn], belong[maxn];
    
    void Tarjan(const int x)
    {
        dfn[x] = low[x] = ++tot;
        vis[x] = 1;
        stk.push(x);
        for (int i = 0; i < t[x].size(); ++i)
        {
            int y = t[x][i];
            if (!dfn[y])
            {
                Tarjan(y);
                low[x] = std::min(low[x], low[y]);
            }
            else if (vis[y])
                low[x] = std::min(low[x], dfn[y]);
        }
        if (dfn[x] == low[x])
        {
            int Last;
            cnt++;
            do
            {
                Last = stk.top();
                vis[Last] = 0;
                belong[Last] = cnt;
                stk.pop();
                /* 输出强连通分量
                SCC[cnt].push_back(Last);
                 */
            } while (stk.size() && Last != x);
        }
        return;
    }
    
    signed main()
    {
        Init();
        for (int i = 1; i <= n; ++i)
            if (!dfn[i])
                Tarjan(i);
    
        for (int i = 1; i <= n; ++i)
            for (int j = 0; j < t[i].size(); ++j)
                if (belong[i] != belong[t[i][j]])
                    SCC[belong[i]].push_back(belong[t[i][j]]);
    
        /*  输出强连通分量
        for (int i = 1; i <= n; ++i)
        {
            ll pos = belong[i];
            if (f[pos])
                continue;
            f[pos] = 1;
            sort(SCC[pos].begin(), SCC[pos].end());
            for (int j = 0; j < SCC[pos].size(); ++j)
                printf("%lld ", SCC[pos][j]);
    
            puts("");
        }
         */
        ......
        
    }
    
  • 相关阅读:
    install cygwin
    Case When PK PIVOT
    SQL Server 2012 Features
    XMLHttpRequest 使用概括
    Html DOM 常用属性和方法
    Rewrite Path in Asp.Net MVC Project
    cefsharp
    线程
    ftp 相关知识集合
    数据库知识集合
  • 原文地址:https://www.cnblogs.com/EdisonBa/p/14948896.html
Copyright © 2020-2023  润新知