• tarjan算法模版


     1 #include<iostream>
     2 #define num 5000
     3 #include<cstring>
     4 using namespace std;
     5 
     6 int n,m;
     7 int f[num];
     8 
     9 
    10 typedef struct{
    11         int u,v,next;
    12         }z;z edg[num];
    13 int edgs=0,head[10000];
    14 void Addedg(int a,int b){
    15      edgs++;
    16      edg[edgs].u=a;edg[edgs].v=b;
    17      edg[edgs].next=head[a];
    18      head[a]=edgs;
    19      }
    20 
    21 void Init(){
    22      cin>>n>>m;
    23      for(int i=1;i<=n;++i)
    24      f[i]=i;
    25      
    26      memset(head,-1,sizeof(head));
    27      for(int i=1;i<=m;++i)
    28      {
    29        int a,b;
    30        cin>>a>>b;
    31        Addedg(i,b);
    32              }
    33      }
    34 
    35 bool mark[10000],vis[10000];
    36 int cordnode[100000],top=-1,times=0;
    37 int mintime[100000];
    38 void Dfs(int k){
    39      int now;
    40      now=mintime[k]=times++;
    41      vis[k]=1;
    42      cordnode[++top]=k;
    43      
    44      for(int i=head[k];i!=-1;i=edg[i].next)
    45      {
    46        int v=edg[i].v;
    47        if(mark[v]) continue;
    48        if(!vis[v]) Dfs(v);
    49        if(mintime[k]>mintime[v]) 
    50        mintime[k]=mintime[v]; 
    51              }
    52      
    53      if(mintime[k]==now)
    54      {
    55        while(cordnode[top]!=k)
    56        {
    57          f[cordnode[top]]=k;
    58          mark[cordnode[top]]=1;
    59          top--;               
    60                               } 
    61        f[cordnode[top]]=k;
    62        top--; 
    63                         }
    64      
    65      
    66      }
    67 
    68 int main()
    69 {
    70     Init();
    71     
    72     for(int i=1;i<=n;++i)
    73     if(!mark[i]) Dfs(i);
    74     
    75     int p[10000]={0};
    76     
    77     for(int i=1;i<=n;++i)
    78     p[f[i]]=1;
    79     int ans=0;
    80     for(int i=1;i<=n;++i)
    81     if(p[i]) ans++;
    82     cout<<ans<<endl;
    83     system("pause");
    84     
    85     } 
  • 相关阅读:
    数据库分库分表
    工作笔记----数据库分表
    工作笔记----数据提取
    Runnable和Thread的应用场景
    LeetCode题目按公司分类
    spring boot Java配置搭建ssm (二)
    spring boot java配置搭建ssm 小案例(IDEA)
    spring boot xml配置搭建 ssm 小案例(IDEA)
    连接查询
    限定、模糊、排序、多表查询(3)
  • 原文地址:https://www.cnblogs.com/noip/p/2728309.html
Copyright © 2020-2023  润新知