Advertisement
Dennnhhhickk

Untitled

Jan 5th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4. #include <cmath>
  5. #include <climits>
  6.  
  7. using namespace std;
  8.  
  9. struct puperfunctionmycreateion{
  10. int data, prev, st, ans;
  11. };
  12.  
  13. int main()
  14. {
  15. puperfunctionmycreateion temp, temp1;
  16. int n, m, free = 0, v, u, h;
  17. vector <int> a,head, ans, next, dest;
  18. queue <puperfunctionmycreateion> q;
  19. //cin >> n >> m;
  20. n = 1000000;
  21. m = n - 1;
  22. head.reserve(1000000);
  23. a.reserve(1000000);
  24. ans.reserve(1000000);
  25. dest.reserve(1000000);
  26. next.reserve(1000000);
  27. head.resize(n + 1);
  28. ans.resize(n + 1);
  29. a.resize(n + 1);
  30. for (int i = 1; i <= n; i++){
  31. next[i] = 0;
  32. ans[i] = INT_MAX - 20;
  33. //cin >> a[i];
  34. if (i == 1 || i == n)
  35. a[i] = i;
  36. else
  37. a[i] = 0;
  38. if (a[i] != 0){
  39. temp.data = i;
  40. temp.st = i;
  41. temp.ans = 0;
  42. temp.prev = 0;
  43. q.push(temp);
  44. }
  45. }
  46. for (int i = 1; i <= m; i++){
  47. //cin >> v >> u;
  48. v = i;
  49. u = i + 1;
  50. free++;
  51. dest.resize(free + 1);
  52. next.resize(free + 1);
  53. dest[free] = u;
  54. next[free] = head[v];
  55. head[v] = free;
  56. free++;
  57. dest.resize(free + 1);
  58. next.resize(free + 1);
  59. dest[free] = v;
  60. next[free] = head[u];
  61. head[u] = free;
  62. }
  63. while (!q.empty()){
  64. temp = q.front();
  65. h = head[temp.data];
  66. while (h){
  67. if (dest[h] != temp.prev)
  68. if (a[dest[h]] == 0){
  69. temp1.data = dest[h];
  70. temp1.st = temp.st;
  71. temp1.ans = temp.ans + 1;
  72. temp1.prev = temp.data;
  73. q.push(temp1);
  74. }
  75. else
  76. if (a[dest[h]] != a[temp.st])
  77. ans[dest[h]] = min(ans[dest[h]], temp.ans + 1);
  78. h = next[h];
  79. }
  80. q.pop();
  81. }
  82. int min2;
  83. min2 = ans[1];
  84. for (int i = 2; i <= n; i++)
  85. min2 = min(min2, ans[i]);
  86. cout << min2 << endl;
  87. return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement