扩大
缩小

【拓扑 && 模板】Kosaraju算法

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1000;
 4 vector <int> g1[maxn],g2[maxn];
 5 stack <int> s;
 6 int vis[maxn],sccno[maxn],cnt;
 7 void dfs1(int u){
 8     if(vis[u]) return ;
 9     vis[u]=1;
10     for(int i=0;i<g1[u].size();i++)
11         dfs1(g1[u][i]);
12     s.push(u);
13 }
14 
15 void dfs2(int u){
16     if(sccno[u]) return ;
17     sccno[u]=cnt;
18     for(int i=0;i<=g2[u].size();i++)
19         dfs2(g2[u][i]);
20 }
21 
22 void KK(int n){
23     cnt=0;
24     while (!s.empty()) s.pop();
25     memset(sccno,0, sizeof(sccno));
26     memset(vis,  0, sizeof(vis));
27     for(int i=0;i<n;i++){
28         dfs1(i);
29     }
30     while(!s.empty()){
31         if(!sccno[s.top()]){
32             cnt++;
33             dfs2(s.top());
34         }
35         s.pop();
36     }
37 }
38 int main(){
39     
40     return 0;
41 }

 

posted @ 2018-05-22 18:38  luv_letters  阅读(259)  评论(2编辑  收藏  举报
AmazingCounters.com
博文导航目录