Advertisement
Guest User

Untitled

a guest
Jun 21st, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. vector<vector<int>> g;
  6. vector<int> ord, used, u;
  7.  
  8. void dfs(int v)
  9. {
  10. if(used[v])
  11. {
  12. return;
  13. }
  14. used[v] = true;
  15. u[v] = true;
  16. for(auto i : g[v])
  17. {
  18. dfs(i);
  19. }
  20. }
  21.  
  22. void dfs1(int v)
  23. {
  24. if(used[v] || u[v])
  25. {
  26. return;
  27. }
  28. used[v] = true;
  29. for(auto i : g[v])
  30. {
  31. dfs1(i);
  32. }
  33. ord.push_back(v);
  34. }
  35.  
  36. void dfs2(int v)
  37. {
  38. if(used[v] || u[v])
  39. {
  40. return;
  41. }
  42. used[v] = true;
  43. for(auto i : g[v])
  44. {
  45. dfs2(i);
  46. }
  47. }
  48.  
  49.  
  50. int main()
  51. {
  52. int n, m, s;
  53. cin >> n >> m >> s;
  54. g.resize(n + 1);
  55. used.resize(n + 1);
  56. u.resize(n + 1);
  57. for(int i = 0; i < m; ++i)
  58. {
  59. int a, b;
  60. cin >> a >> b;
  61. g[a].push_back(b);
  62. }
  63. dfs(s);
  64. used.assign(n + 1, 0);
  65. for(int i = 1; i <= n; ++i)
  66. {
  67. if(!used[i] && !u[i])
  68. {
  69. dfs1(i);
  70. }
  71. }
  72. reverse(ord.begin(), ord.end());
  73. int ans = 0;
  74. used.assign(n + 1, 0);
  75. for(auto i : ord)
  76. {
  77. if(!used[i] && !u[i])
  78. {
  79. dfs2(i);
  80. ++ans;
  81. }
  82. }
  83. cout << ans;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement