zoukankan      html  css  js  c++  java
  • 强联通

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+10;
    vector<int> g[maxn];
    vector<int> rg[maxn];
    vector<int> vs;
    bool vis[maxn];
    int camp[maxn];
    void add_edge(int x,int y) { g[x].push_back(y);   rg[y].push_back(x); }
    void dfs(int x)
    {
        vis[x]=1;
        for(int i=0;i<g[x].size();i++)   if(!vis[g[x][i]]) dfs(g[x][i]);
        vs.push_back(x);
    }
    void rdfs(int x,int k)
    {
        vis[x]=1;
        camp[k]=k;
        for(int i=0;i<rg[x].size();i++)   if(!vis[rg[x][i]]) rdfs(rg[x][i],k++);
    }
    int main()
    {
        int n,m; cin>>n>>m;
        for(int i=1;i<=m;i++)   {  int x,y; add_edge(x,y);  }
        for(int i=1;i<=n;i++)   {  if(!vis[i]) dfs(i);      }
        memset(vis,0,sizeof(vis));   int k=0;
        for(int i=vs.size();i>=0;i--) {   if(!vis[vs[i]]) rdfs(vs[i],k++);  }
    }
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+10;
    vector<int> g[maxn];
    int st[maxn];
    int dfn[maxn];
    int low[maxn];
    int cmp[maxn];
    bool vis[maxn];
    int number=0,top=0,tot=0;
    void tarjan(int x)// x-v;
    {
        dfn[x]=++number;
        low[x]=number;
        vis[x]=1;
        st[++top]=x;
        for(int i=0;i<g[x].size();i++)
        {
            int v=g[x][i];
            if(!dfn[v])     { tarjan(v); low[x]=min(low[v],low[x]);}
            else if(vis[v]) { low[x]= min(low[x],dfn[v])          ;}
        }
        if(low[x]==dfn[x])  // lian tong
        {
            cmp[x]=++tot;  // ran se
            vis[x]=0;
            while(st[top]!=x) { cmp[st[top]]=tot; vis[st[top--]]=0; }
            top--;
        }
    }
    int main()
    {
        int n,m; cin>>n>>m;
        for(int i=1;i<=m;i++) {     int x,y;  cin>>x>>y; g[x].push_back(y);    }
        for(int i=1;i<=n;i++) {     if(!dfn[i]) tarjan(i);                      }
        for(int i=1;i<=n;i++) cout<<cmp[i]<<endl;
    }
  • 相关阅读:
    洛谷 P2486 [SDOI2011]染色 树链剖分
    js 随机打乱数组
    js 中concat()和slice()方法介绍
    encodeURIComponent() 函数的使用
    mysql中LOCATE和CASE WHEN...THEN...ELSE...END结合用法
    Java多态的理解
    JQuery UI完成自动匹配的的下拉列表步骤
    marquee 标签的使用介绍
    orcale数据恢复
    sql中replace的用法
  • 原文地址:https://www.cnblogs.com/Andromeda-Galaxy/p/10425355.html
Copyright © 2011-2022 走看看