Advertisement
Dennnhhhickk

Untitled

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