Advertisement
DoromaAnim

Untitled

Feb 5th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. #include <iostream>
  2. #include <stack>
  3.  
  4. using namespace std;
  5.  
  6. const int MAX = 1e6 + 1;
  7.  
  8. int na_cyklu[MAX], tab[MAX], dlugosc_cyklu[MAX], N, odw[MAX], odl[MAX];
  9.  
  10. stack < int > stos;
  11.  
  12. void DFS(int wie, int pop)
  13. {
  14. stos.push(wie);
  15.  
  16. cout << wie << "\n";
  17.  
  18. odl[wie] = odl[pop] + 1;
  19.  
  20. if(odw[tab[wie]] == 1)
  21. {
  22. int dl = odl[wie] - odl[tab[wie]] + 1;
  23.  
  24. while(stos.top() != tab[wie])
  25. {
  26. na_cyklu[stos.top()] = 1;
  27.  
  28. dlugosc_cyklu[stos.top()] = 1;
  29.  
  30. stos.pop();
  31. }
  32.  
  33. na_cyklu[stos.top()] = 1;
  34.  
  35. dlugosc_cyklu[stos.top()] = 1;
  36.  
  37. stos.pop();
  38. }
  39. else
  40. {
  41. DFS(tab[wie], wie);
  42.  
  43. odw[wie] = 2;
  44. }
  45.  
  46. }
  47.  
  48. int main()
  49. {
  50. ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0);
  51.  
  52. cin >> N;
  53.  
  54. for(int i = 1; i <= N; ++i)
  55. {
  56. cin >> tab[i];
  57. }
  58.  
  59. for(int i = 1; i <= N; ++i)
  60. {
  61. if(odw[i] != 2)
  62. {
  63. //cout << "\t\t" << i << "\n";
  64. odw[i] = 1;
  65.  
  66. DFS(i, 0);
  67. }
  68. }
  69.  
  70. for(int i = 1; i <= N; ++i)
  71. {
  72. if(na_cyklu[i])
  73. {
  74. cout << dlugosc_cyklu[i] << "\n";
  75. }
  76. else
  77. {
  78. cout << "inf\n";
  79. }
  80. }
  81.  
  82. return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement