Advertisement
Ginger_samurai

strongConnectedComponents

Jul 14th, 2020
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. #include<vector>
  2. #include <string>
  3. #include<algorithm>
  4. #include <iostream>
  5. #include <queue>
  6. #include<set>
  7. #include<stack>
  8. #include<cmath>
  9. #include<math.h>
  10. #include<map>
  11. #include<unordered_map>
  12. #include<unordered_map>
  13. using namespace std;
  14. typedef long long ll;
  15. typedef pair<long long, long long> pll;
  16. #define mp make_pair
  17. #define fi(b, c) for(auto i = b; i <= c; i++)
  18. #define fj(b, c) for(auto j = b; j <= c; j++)
  19. #define fk(b, c) for(auto k = b; k <= c; k++)
  20. #define fq(b, c) for(auto q = b; q <= c; q++)
  21. #define fw(b, c) for(auto w = b; w <= c; w++)
  22. #define fim(b, c) for(auto i = b; i >= c; i--)
  23. #define fjm(b, c) for(auto j = b; j >= c; j--)
  24. #define fkm(b, c) for(auto k = b; k >= c; k--)
  25. #define all(a) a.begin(), a.end()
  26. #define rall(a) a.rbegin(), a.rend()
  27. #define sz(a) (ll)(a.size())
  28. #define fs first
  29. #define sd second
  30. #define endl "\n"
  31. #define cin(a) for(ll o = 0; o<a.size(); o++) cin>>a[o];
  32. #define cout(a) for(ll o = 0; o<a.size(); o++) cout<<a[o]<<" ";
  33. const ll inf = 1e9 + 123, llinf = 1e18 + 123;
  34. void xru(){
  35. setlocale(LC_ALL, "rus");
  36. /*freopen(".in", "r", stdin);
  37. freopen(".out", "w", stdout);*/
  38. ios_base::sync_with_stdio(false);
  39. cin.tie(NULL);
  40. cout.tie(NULL);
  41. }
  42. void run(){
  43. cout<<endl;
  44. system("pause");
  45. }
  46.  
  47. void dfs1(ll x, vector< vector<ll> >& g, vector< bool >& used, vector< ll >& order){
  48. used[x] = true;
  49. for(ll v: g[x]){
  50. if(!used[v]){
  51. dfs1(v, g, used, order);
  52. }
  53. }
  54. order.push_back(x);
  55. }
  56.  
  57. void dfs2(ll x, vector< vector<ll> >& gr, vector< bool >& used, vector< ll >& comp, ll id){
  58. used[x] = true;
  59. comp[x] = id;
  60. for(ll v: gr[x]){
  61. if(!used[v]){
  62. dfs2(v, gr, used, comp, id);
  63. }
  64. }
  65. }
  66.  
  67.  
  68. int main() {
  69. ll n, m;
  70. cin >> n >> m;
  71. vector< vector <ll> > g(n), gr(n);
  72. vector< bool > used(n, false);
  73. vector<ll>comps(n), order;
  74. fi (0, m-1) {
  75. ll x, y;
  76. cin >> x >> y;
  77. x--, y--;
  78. g[x].push_back(y);
  79. gr[y].push_back(x);
  80. }
  81. fi(0, n-1){
  82. if(!used[i]){
  83. dfs1(i, g, used, order);
  84. }
  85. }
  86. reverse(all(order));
  87. fi(0, n-1) used[i] = false;
  88. ll id = 0;
  89. for(ll now: order){
  90. if(!used[now]){
  91. id++;
  92. dfs2(now, gr, used, comps, id);
  93. }
  94. }
  95. cout << id << endl;
  96. cout(comps);
  97. run();
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement