• hdu 2767


    View Code
      1 #include<stdio.h>
      2 #include<string.h>
      3 #include<vector>
      4 #define N 20010
      5 using namespace std;
      6 int dfn[N];
      7 int low[N];
      8 int instack[N];
      9 int stack[N];
     10 int belong[N];
     11 int in[N];
     12 int out[N];
     13 int visnum;
     14 int cnt;
     15 int stop;
     16 
     17 int n,m;
     18 vector<int>node[N];
     19 void tarjan(int x)
     20 {
     21     
     22     
     23     dfn[x]=low[x]=++visnum;
     24     instack[x]=1;
     25     stack[++stop]=x;
     26     int j;
     27     for(int i=0;i<node[x].size();i++)
     28     {
     29 
     30 
     31          j=node[x][i];
     32         if(dfn[j]==0)
     33          {
     34             tarjan(j);
     35             if(low[x]>low[j])
     36             low[x]=low[j];
     37         }
     38         else if(instack[j]==1&&low[x]>dfn[j])
     39         low[x]=dfn[j];
     40         
     41         
     42     }
     43     
     44     if(dfn[x]==low[x])
     45     {
     46         
     47         
     48         cnt++;
     49         do
     50         {
     51             j=stack[stop--];
     52             belong[j]=cnt;
     53             instack[j]=0;
     54         }while(x!=j);
     55         
     56     }
     57     
     58 }
     59 int maxa(int x,int y)
     60 {
     61 
     62 
     63   int s;
     64     if(x>y) s=x;
     65     else s=y;
     66     return s;    
     67 }
     68 void init()
     69 {
     70 
     71 
     72     memset(dfn,0,sizeof(dfn));
     73     memset(low,0,sizeof(low));
     74     memset(instack,0,sizeof(instack));
     75     memset(node,0,sizeof(node));
     76     memset(in,0,sizeof(in));
     77     memset(out,0,sizeof(out));
     78     visnum=0;
     79     cnt=0;
     80     stop=0;
     81 }
     82 int main()
     83 {
     84 
     85 
     86     int a,b;
     87     int i,j;
     88     int t; 
     89      scanf("%d",&t);
     90      while(t--){
     91          scanf("%d%d",&n,&m);
     92            if(m==0)
     93            {
     94 
     95 
     96                printf("%d\n",n);
     97                continue;
     98            }
     99            
    100            
    101            
    102                
    103          init();
    104              for(i=0;i<m;i++)
    105              {
    106 
    107 
    108                  scanf("%d%d",&a,&b);
    109                  node[a].push_back(b);
    110                  
    111              }    
    112              
    113              for(i=1;i<=n;i++)
    114              {
    115 
    116 
    117                   if(dfn[i]==0)
    118                   tarjan(i);
    119              }
    120              int s,e;
    121              if(cnt==1) printf("0\n");
    122              else
    123              {
    124 
    125 
    126                  for(i=1;i<=n;i++)
    127                  for(j=0;j<node[i].size();j++)
    128                  {
    129 
    130 
    131                      s=belong[i];
    132                      e=belong[node[i][j]];
    133                      if(s!=e)
    134                      {
    135 
    136 
    137                          in[e]=1;
    138                          out[s]=1;
    139                      }
    140                  }
    141                  int x=0;
    142                  int y=0;
    143 
    144 
    145 
    146 
    147                  for(i=1;i<=cnt;i++)
    148                  {
    149 
    150 
    151                      if(!in[i])
    152                      x++;
    153                      if(!out[i])
    154                      y++;
    155                  }
    156                  
    157                  printf("%d\n",maxa(x,y));
    158              }
    159      }
    160       
    161 }
  • 相关阅读:
    程序11
    程序9
    程序10
    程序8
    提示框
    程序6
    莫名其妙的“网线未连接”
    UI自动化测试笔记(2)
    UI自动化测试笔记(1)
    三年开发项目经验总结
  • 原文地址:https://www.cnblogs.com/1114250779boke/p/2674556.html
Copyright © 2020-2023  润新知