Dang_Quan_10_Tin

Tarjan

Jan 11th, 2021 (edited)
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.00 KB | None | 0 0
  1. #define NguyenDangQuan the_author
  2. #define my_heart love_you_to_the_moon_and_back
  3.  
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6. using ll = long long;
  7. using ld = long double;
  8. using ull = unsigned long long;
  9.  
  10. const int N = 5e4 + 5;
  11. vector<int> adj[N], s;
  12. int n, m, l(0), lt(0);
  13. bool vis[N], on[N];
  14. int low[N], id[N];
  15.  
  16. void Read(){
  17.     cin >> n >> m;
  18.     while(m--){
  19.         int u, v;
  20.         cin >> u >> v;
  21.         adj[u].push_back(v);
  22.     }
  23. }
  24.  
  25. void dfs(int v){
  26.     vis[v] = 1;
  27.     id[v] = low[v] = ++l;
  28.     s.push_back(v);
  29.     on[v] = 1;
  30.     for(auto i : adj[v])
  31.         if(!vis[i]){
  32.             dfs(i);
  33.             low[v] = min(low[v], low[i]);
  34.         }
  35.         else if(on[i])
  36.             low[v] = min(low[v], id[i]);
  37.     if(low[v] == id[v]){
  38.         ++lt;
  39.         int u;
  40.         do{
  41.             u = s.back();
  42.             s.pop_back();
  43.             on[u] = 0;
  44.             cout << u << " ";
  45.         }while(u != v);
  46.         cout << "\n";
  47.     }
  48. }
  49.  
  50. void Solve(){
  51.     for(int i = 1; i <= n; ++i)
  52.         if(!vis[i])
  53.             dfs(i);
  54.     cout << lt;
  55. }
  56.  
  57. main(){
  58.     ios::sync_with_stdio(0);
  59.     cin.tie(0);
  60.     cout.tie(0);
  61.     Read();
  62.     Solve();
  63. }
Add Comment
Please, Sign In to add comment