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 [0..MAXIN, 0..MAXIN] of int64;
- d, mark, b: array [0..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[0] := INF;
- d[s] := 0;
- for j := 1 to n do
- begin
- Ind := 0;
- For i := 1 to n do
- If (mark[i] = 0) and (d[i] < d[ind]) then
- Ind := i;
- If (d[ind] = INF) then
- Break;
- mark[j] := 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]);
- mark[ind] := 1;
- end;
- if (d[f] <> INF) then
- writeln(d[f])
- else
- writeln(-1);
- readln;
- readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment