zoukankan      html  css  js  c++  java
  • 求强连通分量

    #include<iostream>
    #include<stdio.h>
    #include<algorithm>
    #include<vector>
    #include<string>
    #include<string.h>
    using namespace std;
    const int maxx = 100010;
    int n,m;
    vector<int>g[maxx];
    vector<int>rg[maxx];
    vector<int>vs;
    bool vis[maxx];
    int cmp[maxx];
    void dfs(int v)
    {
        vis[v]=true;
        for(int i=0;i<g[v].size();i++)
        {
            if(!vis[g[v][i]]) dfs(g[v][i]);
        }
        vs.push_back(v);
    }
    void rdfs(int v)
    {
        vis[v]=true;
        for(int i=0;i<rg[v].size();i++)
        {
            if(!vis[rg[v][i]]) rdfs(rg[v][i]);
        }
    }
    int main()
    {
        while(scanf("%d%d",&n,&m)&&(n+m)!=0)
        {
            for(int i=0;i<=n;i++)
            {
                g[i].clear();
                rg[i].clear();
            }
            vs.clear();
            for(int i=0;i<m;i++)
            {
                int tmp1,tmp2;
                scanf("%d%d",&tmp1,&tmp2);
                g[tmp1].push_back(tmp2);
                rg[tmp2].push_back(tmp1);
    
            }
            memset(vis,0,sizeof(vis));
            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()-1;i>-1;i--)
            {
                if(!vis[vs[i]])
                {
                    rdfs(vs[i]);
                    k++;
                }
            }
            if(k==1) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }

    先把代码放这,以后有空把学习过程补上。

  • 相关阅读:
    自定义input file样式
    input text 不显示输入的历史记录
    白话 P-value
    R博客
    安装NXNET
    形象的解释神经网络激活函数的作用是什么?
    嵌入式选择与L1正则化
    “梯度下降法”理解
    控制台乱码
    R语言快捷键
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/5721705.html
Copyright © 2011-2022 走看看