P2186

P2186

求强连通分量,用邻接表储存,然后缩点,统计出度的点.话说我很勇敢的使用了邻接矩阵..然后就mle了
orz的是求强连通分量我还只会kosajura..

#include  < iostream >
#include 
< stdio.h >
using   namespace  std;

int  n,m;
int  t = 0 ;
const   int  MAXN = 10001 ;
const   int  MAXM = 50001 ;
bool  used[MAXN];
int  p[MAXN];
int  pos[MAXN];
int  len;
int  d[MAXN];
int  b[MAXN],bb[MAXN];
int  x_[MAXM],y_[MAXM];
struct  node
{
 
int v;
 
int next;
}
ts[MAXM],tss[MAXM];
void  dfs( int  x)
{
 used[x]
=true;
 
int p_=b[x];
 
while(p_>0)
 
{
  
int i=ts[p_].v;
  
if (used[i]) {p_=ts[p_].next;continue;}
  dfs(i);
  p_
=ts[p_].next;
 }

 t
++;
 p[t]
=x;
}

void  dfs1( int  x)
{
 used[x]
=true;
 
int p=bb[x];
 
while(p>0)
 
{
  
int i=tss[p].v;
  
if (used[i]) {p=tss[p].next;continue;}
  dfs1(i);
  p
=tss[p].next;
 }

 pos[x]
=len;
}



void  insert( int  x, int  y, int  i)
{
     ts[i].v
=y;
     ts[i].next
=b[x];
     b[x]
=i;
     tss[i].v
=x;
     tss[i].next
=bb[y];
     bb[y]
=i;
}

int  main()
{
    memset(b,
0,sizeof(b));
    memset(bb,
0,sizeof(bb));
    scanf(
"%d %d",&n,&m);
    
for (int i=1;i<=m;i++)
    
{
     
int x,y;
     scanf(
"%d %d",&x,&y);
     x_[i]
=x;
     y_[i]
=y;
     insert(x,y,i);
    }

    memset(used,
false,sizeof(used));
    
for (int i=1;i<=n;i++)
    
{
     
if (!used[i])
     
{
      dfs(i);
     }

    }

    len
=0;
    memset(used,
false,sizeof(used));

    
for (int i=t;i>=1;i--)
    
{
     
int k=p[i];
     
if (!used[k]) 
     
{
      len
++;
      dfs1(k);
     }

    }

    
    memset(d,
0,sizeof(d));
    
for (int i=1;i<=m;i++)
    
{
     
int x=pos[x_[i]];
     
int y=pos[y_[i]];
     
if (x==y) continue;
     d[x]
++;
    }

    
int result=0;
    
int max_=0;
    
int co=0;
    
for (int i=1;i<=len;i++)
    
{
       
if  (d[i]==0) co++;
    }

    
if (co!=1) cout<<0<<endl;
    
else
    
{
        
for (int i=1;i<=len;i++)
         
if (d[i]==0)
         
{
          
for (int j=1;j<=n;j++)
           
if (pos[j]==i) result++;
         }

        cout
<<result<<endl;
    }

    system(
"pause");
    
return 0;
}

你可能感兴趣的:(P2186)