Cod sursa(job #1033352)

Utilizator ValeraShulghin Valera Valera Data 16 noiembrie 2013 19:37:16
Problema Sate Scor 0
Compilator fpc Status done
Runda cei_mici3 Marime 1.36 kb
type sate=record
     i,j,d:longint;
     end;
type vector=record
     i,d:longint;
     end;

var a:array[1..100] of sate;
    v:array[1..100] of vector;
    q:array[1..100] of longint;
    b,c:array[0..50,0..50] of longint;
    i,j,k,n,m,x,y,p,u,max:longint;
    f,g:text;
begin
assign(f,'sate.in');reset(f);
assign(g,'sate.out');rewrite(g);
readln(f,n,m,x,y);max:=0;
for i:=1 to m do
  begin
    readln(f,a[i].i,a[i].j,a[i].d);
    b[0,a[i].i]:=b[0,a[i].i]+1;
    b[0,a[i].j]:=b[0,a[i].j]+1;
    b[b[0,a[i].i],a[i].i]:=a[i].j;
    b[b[0,a[i].j],a[i].j]:=a[i].i;

    c[0,a[i].i]:=c[0,a[i].i]+1;
    c[0,a[i].j]:=c[0,a[i].j]+1;
    c[c[0,a[i].i],a[i].i]:=a[i].d;
    c[b[0,a[i].j],a[i].j]:=a[i].d;
    if a[i].d>max then max:=a[i].d;
  end;

p:=1;u:=0;q[x]:=1;
for i:=1 to b[0,x] do
  begin
    u:=u+1;
    v[i].i:=b[u,x];
    if b[u,x]>x then v[i].d:=c[i,x] else v[i].d:=-c[i,x];
  end;

while p<=u do
  begin
    for i:=1 to b[0,v[p].i] do
      begin
        if q[b[i,v[p].i]]=0 then
          begin
            u:=u+1;
            v[u].i:=b[i,v[p].i];
            if v[u].i>v[p].i then v[u].d:=v[p].d+c[i,v[p].i]
            else v[u].d:=v[p].d-c[i,v[p].i];
            if v[u].d>max then max:=v[u].d;

          end;
     end;
     q[v[p].i]:=1;
     p:=p+1;

  end;
if q[y]=0 then max:=0;
writeln(g,max);
close(f);close(g);
end.