zoukankan      html  css  js  c++  java
  • 1022 舞会2

    vijos

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<vector>
    #include<queue>
    using namespace std;
    vector <int> a[202];
    int n,m,dfs_num=0,dfn[202],low[202],color_num=0,color[202],st[202];
    bool vis[202];
    int top=0;
    void Tarjan(int x)
    {
        dfn[x]=++dfs_num;
        low[x]=dfs_num;
        vis[x]=true;
        st[++top]=x;
    
        for(int i=0;i<a[x].size();i++)
        {
            int k=a[x][i];
            if(!dfn[k])
            {
                Tarjan(k);
                low[x]=min(low[x],low[k]);
            }
            else if(vis[k]) low[x]=min(dfn[k],low[x]);//or     min=min(low[k],low[x]);
        }
    
        if(low[x]==dfn[x])
        {
            vis[x]=false;
            color[x]=++color_num;
            while(st[top]!=x)
            {
                vis[st[top]]=false;
                color[st[top]]=color_num;
                top--;
            }
    
            top--;
        }
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            int x;
            while(1){
                scanf("%d",&x);
                if(x==0) break;
                a[i].push_back(x);
            }
    
        }
        for(int i=1;i<=n;i++)
        {
            if(!dfn[i])
              Tarjan(i);
        }
        printf("%d
    ",color_num);
        return 0;
    }
  • 相关阅读:
    20201107
    20201024
    20201020
    20200331
    20200330
    20200320
    20200319
    20200310
    20200221
    20190926
  • 原文地址:https://www.cnblogs.com/dfsac/p/6819762.html
Copyright © 2011-2022 走看看