Advertisement
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;
- function min1(a1, b1: int64): int64;
- begin
- if (a1 < b1) then
- min1 := a1
- else
- min1 := b1
- end;
- 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
- begin
- Readln(b[i]);
- If (b[i] = 0) then
- B[i] := INF;
- end;
- 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 n do
- If (a[ind, u] <> 0) and (d[ind] + a[ind, u] < b[u]) then
- D[u] := min1(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
Advertisement