Cod sursa(job #1168923)

Utilizator DjokValeriu Motroi Djok Data 9 aprilie 2014 21:53:00
Problema Sate Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.49 kb
type list=^cell;
     cell=record
      info,cost:longint;
      pred:list;
     end;

var lda:array[1..30005] of list;
    q,rs:array[1..30005] of longint;
    viz:array[1..30005] of byte;
    i,n,m,head,tail,x,y:longint;
    r:list;
    bif,bof:array[1..1 shl 16] of char;

  procedure add(x,y:longint; var r:list);
   var p:list;
    begin
     new(p);
     p^.info:=x;
     p^.cost:=y;
     p^.pred:=r;
     r:=p;
    end;

begin
 assign(input,'sate.in');
 assign(output,'sate.out');
 reset(input);
 rewrite(output);
 settextbuf(input,bif);
 settextbuf(output,bof);

   readln(n,m,x,y);
     for i:=1 to m do
      begin
       readln(head,tail,rs[1]);
       add(tail,rs[1],lda[head]);
       add(head,rs[1],lda[tail]);
      end;

    for i:=1 to n do
     rs[i]:=1 shl 30;

  head:=1; tail:=1; viz[x]:=1; q[1]:=x; rs[x]:=0;
   while head<=tail do
    begin
     r:=lda[q[head]];
      while r<>nil do
       begin
        if viz[r^.info]=0 then begin
                                inc(tail);
                                q[tail]:=r^.info;
                                viz[r^.info]:=1;
                                if q[head]<q[tail] then rs[q[tail]]:=rs[q[head]]+r^.cost
                                                   else rs[q[tail]]:=rs[q[head]]-r^.cost;
                               end;
        r:=r^.pred;
       end;
     inc(head);
    end;

   writeln(rs[y]);

 close(input);
 close(output);
{Totusi este trist in lume}
end.