posts - 74,  comments - 33,  trackbacks - 0
Faint.开始的时候理解错题目意思。。。。晕。。。。。Wa了一次
结果从读之后又因为界限Wa了一次。。。。晕
47ms比较慢,可能是使用了STL的vector和stack的原因吧
部分代码如下
#include<iostream>
#include
<stack>
#include
<vector>
#define MAXN 1200
using namespace std;
int pre[MAXN],low[MAXN],id[MAXN];
int cnt,scnt,n,N,M;
vector
<int>v[MAXN];
stack
<int>ST;
struct NODE{
    
int x,y;    
}
arr[MAXN];
void Tarjan(int x){
    
int t,i;
    
int min=low[x]=pre[x]=cnt++;
    ST.push(x);
    
for(i=0;i<v[x].size();i++){
        t
=v[x][i];
        
if(pre[t]==-1)Tarjan(t);
        
if(low[t]<min)min=low[t];
    }

    
if(min<low[x]){
        low[x]
=min;
        
return;
    }

    
do{
        id[t
=ST.top()]=scnt;
        low[t]
=n;ST.pop();
    }
while(t!=x);
    scnt
++;
}

int SCC(){
    scnt
=cnt=0;
    memset(pre,
0xff,sizeof(pre));
    memset(low,
0,sizeof(low));
    
for(int i=0;i<n;i++)
        
if(pre[i]==-1)Tarjan(i);
    
return scnt;
}
posted on 2009-06-06 20:12 KNIGHT 阅读(443) 评论(0)  编辑 收藏 引用

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


<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(8)

随笔档案

文章档案

Friends

OJ

搜索

  •  

最新评论

阅读排行榜

评论排行榜