Advertisement
bero_0401

Kosaraju’s algorithm

Jun 26th, 2024 (edited)
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | Source Code | 0 0
  1. #include "bits/stdc++.h"
  2. using namespace std;
  3. #define ll long long
  4.  
  5. #define f first
  6. #define s second
  7. #define ull unsigned  long long int
  8. const ll mod =  1e9+7;
  9. #define all(v) v.begin(),v.end()
  10. #define rll(v) v.rbegin(),v.rend()
  11. #define  pii pair <int , int>
  12. #define pll pair <ll , ll>
  13.  
  14. int tt, tc;
  15. const int N = 300005;
  16. const ll INF = 1e18;
  17.  
  18. vector<int> adj[N];
  19. vector<int> adj2[N];
  20.  
  21.  
  22. stack <int> st;
  23. int vis[N];
  24.  
  25. void dfs(int cur)
  26. {
  27.     if(vis[cur])return;
  28.     vis[cur] = 1;
  29.     for (auto u : adj[cur]) {
  30.  
  31.         dfs(u );
  32.  
  33.     }
  34.     st.push(cur);
  35. }
  36. void dfs2(int cur)
  37. {
  38.     if(vis[cur])return;
  39.     vis[cur] = 1;
  40.     for (auto u : adj2[cur]) {
  41.  
  42.         dfs2(u );
  43.     }
  44.  
  45. }
  46.  
  47. void solve() {
  48.     int n  , m; cin>>n>>m;
  49.  
  50.     for(int i =0 ; i<m; i++) {
  51.         int u, v;
  52.         cin >> u >> v;
  53.         adj[u].push_back(v);
  54.  
  55.     }
  56.     for(int i = 1; i<= n; i++)
  57.     {
  58.         if(!vis[i])
  59.             dfs(i);
  60.     }
  61.  
  62.     for(int  i = 1; i<=n;i++)
  63.     {
  64.         vis[i] =0;
  65.         for(int v : adj[i])
  66.         {
  67.             adj2[v].push_back(i);
  68.         }
  69.     }
  70.     int cnt =0 ;
  71.     while(!st.empty())
  72.     {
  73.         int u  =st.top();
  74.         st.pop();
  75.         cout<<u<<" ";
  76.         if(!vis[u])
  77.         {
  78.             cnt++;
  79.             dfs2(u);
  80.         }
  81.  
  82.     }
  83.     cout<<"\n";
  84.     cout<<cnt<<"\n";
  85.  
  86. }
  87.  
  88.  
  89.  
  90.  
  91.  
  92. int main() {
  93.     ios::sync_with_stdio(0); cin.tie(0);
  94.     tt = 1, tc = 1; //cin >> tt;
  95.     while (tt--) solve(), tc++;
  96. }
  97.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement