Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Project1;
- {$APPTYPE CONSOLE}
- uses
- SysUtils;
- const
- MAXIN = 2000;
- INF = 100000000000;
- var
- n, s, f, i, j, ind, u, m, x, y, data: integer;
- a: array [1..MAXIN, 1..MAXIN] of int64;
- d, mark, b: array [1..MAXIN] of int64;
- min: int64;
- begin
- readln(n, m, s, f);
- for i := 1 to n do
- begin
- mark[i] := 0;
- d[i] := INF;
- b[i] := 0;
- end;
- for i := 1 to m do
- for j := 1 to m do
- a[i][j] := 0;
- for i := 1 to n do
- read(b[i]);
- for i := 1 to m do
- begin
- readln(x, y, data);
- a[x][y] := data;
- a[y][x] := data;
- end;
- d[s] := 0;
- while (true) do
- begin
- ind := -1;
- min := INF;
- for i := 1 to m do
- if ((mark[i] = 0) and (d[i] <= min)) then
- begin
- ind := i;
- min := d[i];
- end;
- if (ind = -1) then
- break;
- mark[ind] := 1;
- for u := 1 to m do
- 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
- d[u] := d[ind] + a[ind][u];
- end;
- if (d[f] <> INF) then
- writeln(d[f])
- else
- writeln(-1);
- readln;
- readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment