Dennnhhhickk

Untitled

Sep 18th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6. SysUtils;
  7.  
  8. const
  9. MAXIN = 2000;
  10. INF = 100000000000;
  11.  
  12. var
  13. n, s, f, i, j, ind, u, m, x, y, data: integer;
  14. a: array [0..MAXIN, 0..MAXIN] of int64;
  15. d, mark, b: array [0..MAXIN] of int64;
  16. min: int64;
  17.  
  18. function min1(a1, b1: int64): int64;
  19. begin
  20. if (a1 < b1) then
  21. min1 := a1
  22. else
  23. min1 := b1
  24. end;
  25.  
  26. begin
  27. readln(n, m, s, f);
  28.  
  29. for i := 1 to n do
  30. begin
  31. mark[i] := 0;
  32. d[i] := INF;
  33. b[i] := 0;
  34. end;
  35.  
  36. for i := 1 to m do
  37. for j := 1 to m do
  38. a[i][j] := 0;
  39.  
  40. For i := 1 to n do
  41. begin
  42. Readln(b[i]);
  43.  
  44. If (b[i] = 0) then
  45.  
  46. B[i] := INF;
  47.  
  48. end;
  49.  
  50. for i := 1 to m do
  51. begin
  52. readln(x, y, data);
  53. a[x][y] := data;
  54. a[y][x] := data;
  55. end;
  56.  
  57. D[0] := INF;
  58. d[s] := 0;
  59.  
  60. for j := 1 to n do
  61. begin
  62. Ind := 0;
  63. For i := 1 to n do
  64. If (mark[i] = 0) and (d[i] < d[ind]) then
  65. Ind := i;
  66. If (d[ind] = INF) then
  67. Break;
  68. mark[j] := 1;
  69. For u := 1 to n do
  70. If (a[ind, u] <> 0) and (d[ind] + a[ind, u] < b[u]) then
  71. D[u] := min1(d[u], d[ind] + a[ind, u]);
  72. mark[ind] := 1;
  73. end;
  74.  
  75. if (d[f] <> INF) then
  76. writeln(d[f])
  77. else
  78. writeln(-1);
  79.  
  80. readln;
  81. readln;
  82.  
  83. end.
Advertisement
Add Comment
Please, Sign In to add comment