Cod sursa(job #773889)
Program sate;
type lista=^celula;
celula=record
nod,c:longint;
next:lista;
end;
var graf:array [1..30000] of lista;
sol:array [1..30000] of longint;
b1:array [1..1 shl 17] of char;
v,coada,r,cell:lista;
n,m,x,y,c,s,f,i:longint;
fi,fo:text;
begin
assign(fi,'sate.in');
assign(fo,'sate.out');
settextbuf(fi,b1);
reset(fi); rewrite(fo); readln(fi,n,m,s,f);
for i:=1 to m do begin
readln(fi,x,y,c);
new(v); v^.nod:=y; v^.c:=c; v^.next:=graf[x]; graf[x]:=v;
new(v); v^.nod:=x; v^.c:=c; v^.next:=graf[y]; graf[y]:=v;
end;
new(v); v^.nod:=s; coada:=v;
while sol[f]=0 do begin
r:=graf[v^.nod];
while r<>nil do begin
if (r^.nod>v^.nod) and (sol[r^.nod]=0) and (r^.nod<>s) then begin
sol[r^.nod]:=sol[v^.nod]+r^.c;
new(cell); cell^.nod:=r^.nod; coada^.next:=cell; coada:=cell;
end
else if (r^.nod<v^.nod) and (sol[r^.nod]=0) and (r^.nod<>s) then begin
sol[r^.nod]:=sol[v^.nod]-r^.c;
new(cell); cell^.nod:=r^.nod; coada^.next:=cell; coada:=cell;
end;
r:=r^.next;
end;
v:=v^.next;
end;
write(fo,sol[f]);
close(fo);
end.