巢穴

about:blank

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;
}

posted on 2009-11-04 12:48 Vincent 阅读(97) 评论(0)  编辑 收藏 引用 所属分类: 数据结构与算法


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理