zoukankan      html  css  js  c++  java
  • 裸的tarjan(模板)

    #include <cstdio>
    #include <iostream>
    #include <vector>
    using namespace std;
    vector <int> q[1000];
    int color[10000],c=0,num=0,low[1000],dfn[1000],top=0,f[1000],s[1000],maxf=-1;
    void dfs(int x)
    {
    
        dfn[x]=++num;
        low[x]=num;
        f[x]=1;
        s[++top]=x;
    
        for(int i=0;i<q[x].size();i++)
        {
            int tmp=q[x][i];
            if(dfn[tmp]==0)
            {
                dfs(tmp);
                low[x]=min(low[x],low[tmp]);
            }
            else 
             if(f[tmp]==1)
             {
                low[x]=min(low[x],dfn[tmp]);
             }
        } 
    
        if(low[x]==dfn[x])
        {
            f[x]=0;
            color[x]=++c;
            while(s[top]!=x)
            {
                color[s[top]]=c;
                f[s[top]]=0;
                top--
            } 
            top--;
        }
    }
    int main()
    {
        int n,m;
    
        scanf("%d",&n);
    
        for(int i=1;i<=n;i++)
        {
            while(1)
            {
                int k;
                scanf("%d",&k);
                if(k==0) break;
                q[i].push_back(k);
            }
        }
    
        for(int i=1;i<=n;i++)
        if(!dfn[i]) dfs(i);
    
        printf("%d
    ",c);
    
        /*for(int i=1;i<=c;i++)
         {
            for(int j=1;j<=n;j++)
            {
            if(color[j]==i) printf("%d ",j);
            }
            puts("");
         }*/
    
         return 0;
    }
  • 相关阅读:
    常见名词解释
    主板结构解析
    计算机网络原理的总结
    Nginx的介绍
    优雅的python
    python小技巧
    python列表小程序
    学会浏览器查东西
    列表推导式
    深度优先算法与广度优先算法
  • 原文地址:https://www.cnblogs.com/ht008/p/6819838.html
Copyright © 2011-2022 走看看