Pagini recente » Cod sursa (job #3240646) | Cod sursa (job #944454) | Cod sursa (job #2763385) | Cod sursa (job #2125929) | Cod sursa (job #2179167)
Program P1;
type smax = -20000000..20000000;
nmax = 0..30000;
coada = ^ccelula;
ccelula = record
inf:nmax;
s:smax;
urm:coada;
end;
stiva = ^celula;
celula = record
inf:nmax;
d:smax;
pre:stiva;
end;
lista = array[nmax] of stiva;
vi = array[nmax] of 0..1;
var n1,n2,n,x,y:nmax;
m,i:longint;
d:smax;
f,g:text;
l:lista;
viz:vi;
c,v:coada;
procedure Push(nod:nmax; d:longint; var s:stiva);
var r:stiva;
begin
new(r);
r^.inf:=nod;
r^.d:=d;
r^.pre:=s;
s:=r;
end;
procedure Pushc(nod:nmax; d:longint);
var r:coada;
begin
new(r);
r^.inf:=nod;
r^.urm:=nil;
r^.s:= d;
if c = nil then
c:=r
else
v^.urm:=r;
v:=r;
end;
procedure pop(var s:stiva);
var r:stiva;
begin
if s<>nil then begin
r:=s;
s:= s^.pre;
dispose(r);
end;
end;
procedure popc;
var r:coada;
begin
if (c <> nil) then begin
r:=c;
c:= c^.urm;
dispose(r);
end;
end;
procedure BFS;
begin
pushc(x,0);
viz[x] := 1;
while (c <> nil) do begin
while (l[x] <> nil) do begin
if l[x]^.inf = y then exit;
if viz[l[x]^.inf] = 0 then begin
pushc(l[x]^.inf,c^.s + l[x]^.d);
viz[l[x]^.inf]:=1;
end;
pop(l[x]);
end;
popc;
if c<>nil then
x:=c^.inf;
end;
end;
begin
assign(f,'sate.in');
assign(g,'sate.out');
reset(f);
rewrite(g);
new(v);
readln(f,n,m,x,y);
for i:=1 to m do begin
readln(f,n1,n2,d);
push(n1,-d,l[n2]);
push(n2,d,l[n1]);
end;
BFS;
write(g,abs(c^.s+l[x]^.d));
close(f);
close(g);
end.