Pagini recente » Cod sursa (job #2870978) | Cod sursa (job #2568898) | Istoria paginii runda/cls11_oji_2017 | Cod sursa (job #1448698) | Cod sursa (job #1038436)
Program satele_distanta;
type drum=record
x,y:integer; d:longint;
end;
rezul=record
p:integer; k:longint;
end;
var
a:array[1..100024] of drum;
parcurs:array[1..100024] of boolean;
rez:array[1..30001] of rezul;
val:array[1..30001] of longint;
i,n,m,xi,xf,l,r:integer; f,g:text;
begin
assign(f,'sate.in'); reset(f);
read(f,n,m,xi,xf);
for i:=1 to m do
begin
read(f,a[i].x,a[i].y,a[i].d);
parcurs[i]:=true;
end;
close(f);
for i:=1 to n do
val[i]:=0;
l:=1; r:=2;
rez[l].p:=xi; rez[l].k:=0; val[xi]:=0;
while val[xf]=0 do
begin
for i:=m downto 1 do
if parcurs[i] then
begin
if a[i].x=rez[l].p then
begin parcurs[i]:=false;
if val[a[i].y]=0 then begin
rez[r].p:=a[i].y;
if a[i].y<rez[l].p then rez[r].k:=rez[l].k+a[i].d else rez[r].k:=rez[l].k-a[i].d;
val[a[i].y]:=rez[r].k;
inc(r); end;
end;
if a[i].y=rez[l].p then
begin parcurs[i]:=false;
if val[a[i].x]=0 then begin
rez[r].p:=a[i].x;
if a[i].x<rez[l].p then rez[r].k:=rez[l].k+a[i].d else rez[r].k:=rez[l].k-a[i].d;
val[a[i].x]:=rez[r].k;
inc(r); end;
end;
end;
inc(l);
end;
assign(g,'sate.out');
rewrite(g);
writeln(g,abs(val[xf]));
close(g);
end.