Pagini recente » Cod sursa (job #2455749) | Cod sursa (job #1892224) | Cod sursa (job #1220717) | Cod sursa (job #2086170) | Cod sursa (job #186733)
Cod sursa(job #186733)
const inf = 1001;
type graf=^elem;
elem=record
info, cost : longint;
next : graf;
end;
lista=^list;
list=record
info : longint;
next : lista;
end;
var fi,fo : text;
n, m, ns, nf, i, j, k, tr : longint;
d : Array[1..250000]of longint;
v : Array[1..250000]of graf;
l : Array[0..1000]of lista;
p : graf;
q, f : lista;
begin
assign(fi,'pscnv.in'); reset(fi);
assign(fo,'pscnv.out'); rewrite(fo);
read(fi,n,m,ns,nf);
for tr:=1 to m do
begin
read(fi,i,j,k);
new(p);
p^.info:=j;
p^.cost:=k;
p^.next:=v[i];
v[i]:=p;
end;
for i:=1 to n do
d[i]:=inf;
d[ns]:=0;
new(q);
q^.info:=ns;
q^.next:=l[0];
l[0]:=q;
for i:=0 to 1000 do
begin
q:=l[i];
while q<>nil do
begin
if d[q^.info]=i then
begin
p:=v[q^.info];
while p<>nil do
begin
if d[q^.info]>p^.cost then
if d[p^.info]>d[q^.info] then
begin
new(f);
f^.info:=p^.info;
f^.next:=l[d[q^.info]];
l[d[q^.info]]:=f;
d[p^.info]:=d[q^.info];
end;
if p^.cost>=d[q^.info] then
if d[p^.info]>p^.cost then
begin
new(f);
f^.info:=p^.info;
f^.next:=l[p^.cost];
l[p^.cost]:=f;
d[p^.info]:=p^.cost;
end;
p:=p^.next;
end;
end;
q:=q^.next;
end;
end;
writeln(fo,d[nf]);
close(fi);
close(fo);
end.