Pagini recente » Cod sursa (job #2766005) | Cod sursa (job #1154387) | Cod sursa (job #2863977) | Cod sursa (job #222972) | Cod sursa (job #2179129)
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;
if c^.inf = y then
write(g,abs(c^.s));
c:= c^.urm;
dispose(r);
end;
end;
procedure BFS(nod:nmax);
begin
pushc(nod,0);
viz[nod] := 1;
while c <> nil do begin
while l[nod] <> nil do begin
if viz[l[nod]^.inf] = 0 then begin
pushc(l[nod]^.inf,c^.s + l[nod]^.d);
viz[l[nod]^.inf]:=1;
end;
pop(l[nod]);
end;
popc;
if c<>nil then
nod:=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(x);
close(f);
close(g);
end.