zoukankan      html  css  js  c++  java
  • 强连通分量[trajan]

    http://poj.org/problem?id=2186

    View Code
    const int MM = 11111;
    #define debug puts("wrong")
    typedef __int64 int64;
    int N,M;
    vector<int>edge[MM];
    const int maxn = 11111; //节点数
    bool instack[maxn];
    int ief,top,bcnt,st[maxn];
    int low[maxn],dfn[maxn],belong[maxn];
    int out[MM];
    
    void get_data() {
        int i,j,k,x,y;
        for(i=0;i<=N;i++) edge[i].clear();
        for(i=0;i<M;i++) {
            scanf("%d%d",&x,&y);
            edge[x].push_back(y);
        }
    }
    void get_init(int n) { //节点数
        for(int i=0;i<=n;i++)
            low[i]=dfn[i]=instack[i]=belong[i]=0;
        top=bcnt=0; ief=1;
    }
    void trajan(int u) {
        int i,j,k,v;
        dfn[u]=low[u]=ief++;
        st[top++]=u; instack[u]=true;
        for(i=0;i<edge[u].size();i++) {
            v=edge[u][i];
            if(!dfn[v]) trajan(v);
            if(low[u]>low[v]) low[u]=low[v];
            else if(instack[v] && dfn[v]<low[u]) low[u]=dfn[k];
        }
        if(low[u]==dfn[u]) {
            bcnt++;
            do {
                v=st[--top];
                instack[v]=false;
                belong[v]=bcnt;
            }while(u!=v);
        }
    }
    int get_ans(int x) {
        int res=0;
        for(int i=1;i<=N;i++) if(belong[i]==x) res++;
        return res;
    }
    void solve() {
        int i,j,k,v;
        get_init(N);
        for(i=1;i<=N;i++) if(!dfn[i]) trajan(i);
        for(i=1;i<=N;i++) out[i]=0;
        for(i=1;i<=N;i++) {
            for(j=0;j<edge[i].size();j++) {
                v=edge[i][j];
                if(belong[i]!=belong[v]) out[belong[i]]++;
            }
        }
        int res,cc=0;
        for(i=1;i<=bcnt;i++) if(!out[i]) cc++,res=i;
        if(cc>1) puts("0");
        else printf("%d\n",get_ans(res));
    }
  • 相关阅读:
    面向 部分
    并发 编程
    数据库 部分
    匿名函数
    Linux 30岁,这些年经历了什么?
    漫谈 HTTP 连接
    华为交换机命令基础入门学习,小白也能看得懂!
    一文讲透APaaS平台是什么
    什么是边缘CDN和虚拟CDN (vCDN)?
    systemd进程管理工具实战教程
  • 原文地址:https://www.cnblogs.com/zhang1107/p/3058859.html
Copyright © 2011-2022 走看看