Advertisement
Dennnhhhickk

Untitled

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