Advertisement
Dennnhhhickk

Untitled

Jan 7th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.31 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4. #include <climits>
  5.  
  6. using namespace std;
  7.  
  8. struct prots{
  9. int ans, data, st;
  10. vector <int> prev;
  11. };
  12.  
  13. int main()
  14. {
  15. prots temp1, p;
  16. vector <vector <int> > dp;
  17. vector <int> a, ans;
  18. queue <prots> q;
  19. int n, m;
  20. //cin >> n >> m;
  21. n = 1000000;
  22. m = n - 1;
  23. a.reserve(n + 1);
  24. a.resize(n + 1);
  25. dp.reserve(n + 1);
  26. ans.reserve(n + 1);
  27. ans.resize(n + 1);
  28. dp.resize(n + 1);
  29. for (int i = 1; i <= n; i++){
  30. //cin >> a[i];
  31. if ( i == 1|| i == n)
  32. a[i] = i;
  33. else
  34. a[i] = 0;
  35. ans[i] = INT_MAX - 20;
  36. if (a[i] != 0){
  37. temp1.data = i;
  38. temp1.st = i;
  39. temp1.prev.push_back(i);
  40. temp1.ans = 0;
  41. q.push(temp1);
  42. }
  43. }
  44. int x, y;
  45. for (int i = 1; i <= m; i++){
  46. //cin >> x >> y;
  47. x = i;
  48. y = i + 1;
  49. dp[x].push_back(y);
  50. dp[y].push_back(x);
  51. }
  52. int data1;
  53. cin >> data1;
  54. bool bol;
  55. while (!q.empty()){
  56. p = q.front();
  57. q.pop();
  58. for (int i = 0; i < dp[p.data].size(); i++){
  59. data1 = dp[p.data][i];
  60. bol = true;
  61. for (int j = 0; j < p.prev.size(); j++)
  62. if (data1 == p.prev[j]){
  63. bol = false;
  64. break;
  65. }
  66. if (bol){
  67. if (a[data1] == 0){
  68. temp1.data = data1;
  69. temp1.st = p.st;
  70. temp1.prev = p.prev;
  71. temp1.prev.push_back(data1);
  72. temp1.ans = p.ans + 1;
  73. q.push(temp1);
  74. }
  75. else
  76. if (a[data1] != a[p.st]){
  77. ans[data1] = min(ans[data1], p.ans + 1);
  78. ans[p.st] = min(ans[p.st], ans[data1]);
  79. }
  80. }
  81. }
  82. }
  83. int min2 = ans[1];
  84. for (int i = 2; i <= n; i++)
  85. if (ans[i] < min2)
  86. min2 = ans[i];
  87. cout << min2 << "\n";
  88. return 0;
  89. }
  90.  
  91. /*16 24
  92. 2 0 0 0 0 0 0 4 0 1 0 0 0 0 0 0
  93. 1 2
  94. 1 3
  95. 1 4
  96. 1 7
  97. 2 4
  98. 2 7
  99. 2 5
  100. 2 6
  101. 3 4
  102. 4 7
  103. 5 8
  104. 5 9
  105. 5 10
  106. 5 11
  107. 6 12
  108. 6 13
  109. 6 14
  110. 6 15
  111. 6 16
  112. 12 5
  113. 13 5
  114. 14 5
  115. 15 5
  116. 16 5*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement