Advertisement
achulkov2

Untitled

Apr 15th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.44 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #define pb push_back
  5. #define ll long long
  6. using namespace std;
  7.  
  8. vector<vector<int>> g, tg;
  9. vector<int> tsort;
  10. vector<int> used;
  11. vector<int> comps;
  12. int k = 0;
  13.  
  14. void t_dfs(int v) {
  15. ++k;
  16. used[v] = 1;
  17. for (int s : g[v]) {
  18. if (!used[s]) t_dfs(s);
  19. }
  20. tsort.pb(v);
  21. }
  22.  
  23. void dfs(int v, int col) {
  24. used[v] = 1;
  25. if (comps[v] == -1) {
  26. comps[v] = col;
  27. }
  28. for (int s : tg[v]) {
  29. if (!used[s]) dfs(s, col);
  30. }
  31. }
  32.  
  33. int main() {
  34. //freopen("input.txt", "r", stdin);
  35. int n, m;
  36. cin >> n >> m;
  37. for (int i = 0; i < n; ++i) {
  38. g.pb({});
  39. tg.pb({});
  40. used.pb(0);
  41. }
  42. for (int i = 0; i < m; ++i) {
  43. int a, b;
  44. cin >> a >> b;
  45. --a;
  46. --b;
  47. g[a].pb(b);
  48. tg[b].pb(a);
  49. }
  50.  
  51. while (k < n) {
  52. for (int i = 0; i < n; ++i) {
  53. if (!used[i]) t_dfs(i);
  54. }
  55. }
  56. /*for (int i = 0; i < n; ++i) cout << tsort[i] << " ";
  57. cout << "\n";*/
  58.  
  59. for (int i = 0; i < n; ++i) {
  60. comps.pb(-1);
  61. used[i] = 0;
  62. }
  63.  
  64. int t = 0;
  65. for (int i = n - 1; i >= 0; --i) {
  66. if (comps[tsort[i]] == -1) {
  67. dfs(tsort[i], t);
  68. ++t;
  69. }
  70. }
  71.  
  72. cout << t << "\n";
  73. for (int i = 0; i < n; ++i) {
  74. cout << comps[i] + 1 << " ";
  75. }
  76. return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement