Dennnhhhickk

Untitled

Sep 18th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.19 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 [1..MAXIN, 1..MAXIN] of int64;
  15.   d, mark, b: array [1..MAXIN] of int64;
  16.   min: int64;
  17. begin
  18.   readln(n, m, s, f);
  19.  
  20.   for i := 1 to n do
  21.   begin
  22.     mark[i] := 0;
  23.     d[i] := INF;
  24.     b[i] := 0;
  25.   end;
  26.  
  27.   for i := 1 to m do
  28.     for j := 1 to m do
  29.       a[i][j] := 0;
  30.  
  31.   for i := 1 to n do
  32.     read(b[i]);
  33.  
  34.   for i := 1 to m do
  35.   begin
  36.     readln(x, y, data);
  37.     a[x][y] := data;
  38.     a[y][x] := data;
  39.   end;
  40.  
  41.   d[s] := 0;
  42.  
  43.   while (true) do
  44.   begin
  45.     ind := -1;
  46.     min := INF;
  47.     for i := 1 to m do
  48.       if ((mark[i] = 0) and (d[i] <= min)) then
  49.       begin
  50.         ind := i;
  51.         min := d[i];
  52.       end;
  53.     if (ind = -1) then
  54.       break;
  55.     mark[ind] := 1;
  56.     for u := 1 to m do
  57.       if ((a[ind][u] <> 0) and (mark[u] = 0) and (d[u] > d[ind] + a[ind][u]) and (((d[ind] + a[ind][u] < b[u]) and (b[u] <> 0)) or (b[u] = 0))) then
  58.         d[u] := d[ind] + a[ind][u];
  59.   end;
  60.  
  61.   if (d[f] <> INF) then
  62.     writeln(d[f])
  63.   else
  64.     writeln(-1);
  65.  
  66.   readln;
  67.   readln;
  68.  
  69. end.
Advertisement
Add Comment
Please, Sign In to add comment