Advertisement
Dennnhhhickk

Untitled

Jan 4th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. program Project2;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6. SysUtils, Math;
  7.  
  8. const
  9. MAXIN = 1000000;
  10.  
  11. type
  12. time = record
  13. data, prev, st: integer;
  14. ans: int64;
  15. end;
  16.  
  17. var
  18. z, n, m, i, j, x, y, data, ind, free, h, p, last, min1, min2: integer;
  19. a, mark, s, head, dest, next, ans, ans1: array [0..MAXIN] of integer;
  20. q: array [0..MAXIN] of time;
  21. bol: boolean;
  22.  
  23. function size(p, last: integer): boolean;
  24. begin
  25. size := (p <= last) or (last > p);
  26. end;
  27.  
  28. procedure add(v, u: integer);
  29. begin
  30. inc(free);
  31. dest[free] := u;
  32. next[free] := head[v];
  33. head[v] := free;
  34. end;
  35.  
  36. begin
  37. min2 := MAXINT - 20;
  38. last := -1;
  39. free := 0;
  40. dest[0] := -1;
  41. readln(n, m);
  42.  
  43. for i := 1 to n do
  44. begin
  45. next[i] := 0;
  46. ans[i] := MAXINT - 20;
  47. read(data);
  48. a[i] := data;
  49. if (data <> 0) then
  50. begin
  51. inc(last);
  52. if (last > MAXIN) then
  53. last := 0;
  54. q[last].data := i;
  55. q[last].st := i;
  56. q[last].ans := 0;
  57. q[last].prev := 0;
  58. end;
  59. end;
  60.  
  61. for i := 1 to m do
  62. begin
  63. read(x, y);
  64. add(x, y);
  65. add(y, x);
  66. end;
  67.  
  68. //______________________________________________________________________________
  69. p := 0;
  70.  
  71. while (size(p, last)) do
  72. begin
  73. h := head[q[p].data];
  74. while (h <> 0) do
  75. begin
  76. if (dest[h] <> q[p].prev) then
  77. if (a[dest[h]] = 0) then // ?????? ???????????
  78. begin
  79. inc(last);
  80. if (last > MAXIN) then
  81. last := 0;
  82. q[last].data := dest[h];
  83. q[last].st := q[p].st;
  84. q[last].ans := q[p].ans + 1;
  85. q[last].prev := q[p].data;
  86. end
  87. else
  88. if (a[dest[h]] <> a[q[p].st]) then // ????? ???? ???? ????? ???????????? ????
  89. ans[dest[h]] := min(ans[dest[h]], q[p].ans + 1);
  90. h := next[h];
  91. end;
  92. inc(p);
  93. if (p > MAXIN) then
  94. p := 0;
  95. end;
  96. //_________________________________________________________________________
  97.  
  98. min2 := ans[1];
  99. for i := 2 to n do
  100. if (min2 > ans[i]) then
  101. min2 := ans[i];
  102.  
  103. writeln(min2);
  104. readln;
  105. readln;
  106. end.
  107.  
  108. 4 4
  109. 1 0 2 0
  110. 1 2
  111. 2 3
  112. 3 4
  113. 4 1
  114. 2
  115.  
  116. 5 4
  117. 1 0 2 1 0
  118. 1 5
  119. 4 5
  120. 5 2
  121. 2 3
  122. 3
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement