Pagini recente » Cod sursa (job #974796) | Cod sursa (job #233413) | Cod sursa (job #474401) | Cod sursa (job #135974) | Cod sursa (job #133621)
Cod sursa(job #133621)
type pelem=^elem;
elem=record
info:longint;
next:pelem;
end;
var fi,fo:text;
sat,dist:array[1..100125]of pelem;
n,m,i,j,x,y,d,varf1,varf2,first,last:longint;
s:array[1..31000]of byte;
distanta:array[1..31000]of longint;
coada:array[1..31000]of longint;
procedure push(var first:pelem; vl:longint);
var p:pelem;
begin
new(p);
p^.info:=vl;
p^.next:=first;
first:=p;
end;
procedure pop(var first:pelem; var vl:longint);
var p:pelem;
begin
vl:=first^.info;
p:=first;
first:=first^.next;
dispose(p);
end;
procedure qin(vl:longint);
begin
coada[last]:=vl;
inc(last);
end;
procedure qout(var vl:longint);
begin
vl:=coada[first];
inc(first);
end;
procedure bf(start:longint);
var nod,varf,lung:longint;
begin
s[start]:=1;
qin(start);
while first<>last do
begin
qout(nod);
while sat[nod]<>nil do
begin
pop(sat[nod],varf);
pop(dist[nod],lung);
if s[varf]=0 then
begin
s[varf]:=1;
qin(varf);
if nod<varf then distanta[varf]:=distanta[nod]+lung
else distanta[varf]:=distanta[nod]-lung;
if varf=y then exit;
end;
end;
end;
end;
begin
assign(fi,'sate.in'); reset(fi);
assign(fo,'sate.out'); rewrite(fo);
read(fi,n,m,x,y);
for i:=1 to m do
begin
read(fi,varf1,varf2,d);
push(sat[varf1],varf2);
push(dist[varf1],d);
push(sat[varf2],varf1);
push(dist[varf2],d);
end;
first:=1; last:=1;
bf(x);
writeln(fo,abs(distanta[y]));
close(fi);
close(fo);
end.