Cod sursa(job #773887)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 2 august 2012 19:19:50
Problema Sate Scor 60
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.24 kb
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;
    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');
 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.