Cod sursa(job #152859)

Utilizator petrePajarcu Alexandru-Petrisor petre Data 9 martie 2008 21:06:26
Problema Sate Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.32 kb
var n,m,z,y,di:longint;
dir,dist:array[0..200048] of longint;
x,pas:array[0..30000] of longint;
i,j:longint;
a,b,c:array[1..100024] of longint;

procedure bf(z,y:longint);
var i,j,k:longint;
fol,dis:array[1..30000] of longint;
begin
k:=1;
fillchar(fol,sizeof(fol),0);
fillchar(dis,sizeof(dis),0);
pas[k]:=z;
fol[z]:=1;
dis[k]:=0;
i:=0;
while (I<k)and(fol[y]=0) do
        begin
        inc(I);
        for j:=x[pas[i]]+1 to x[pas[i]+1]  do
                if fol[dir[j]]=0 then
                        begin
                        fol[dir[j]]:=k+1;
                        inc(K);
                        dis[k]:=dis[i]+dist[j];
                        pas[k]:=dir[j];
                        end;
        end;
di:=dis[fol[y]];
end;


begin
assign(input,'sate.in');
assign(output,'sate.out');
reset(input);
rewrite(output);
readln(n,m,z,y);
for i:=1 to m do
        begin
        readln(a[i],b[i],c[i]);
        inc(x[a[i]]);
        inc(x[b[i]]);
        end;
for i:=2 to n do
        x[i]:=x[i-1]+x[i];
        x[n+1]:=2*m;
for i:=1 to m do
        begin
        dir[x[a[i]]]:=b[i];
        dist[x[a[i]]]:=c[i];
        dec(x[a[i]]);
        dir[x[b[i]]]:=a[i];
        dist[x[b[i]]]:=-c[i];
        dec(x[b[i]]);
        end;
bf(z,y);
write(di);
close(input);
close(output);
end.