Cod sursa(job #13360)

Utilizator andreitheo87Teodorescu Andrei-Marius andreitheo87 Data 6 februarie 2007 13:44:52
Problema Amenzi Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.32 kb
type adr=^rec;
     rec=record
          urm:adr;
          x,c:integer;
         end;
var fi,fo:text;
    x,y,cc,i,j,n,m,k,nrp:integer;
    la:array[0..3501]of adr;
    a,b,c:array[1..1500]of integer;
    max:array[0..3501,1..150]of longint;
    p:adr;
begin
 assign(fi,'amenzi.in'); reset(fi);
 assign(fo,'amenzi.out'); rewrite(fo);
 readln(fi,n,m,k,nrp);
 for i:=1 to m do readln(fi,a[i],b[i],c[i]);
 for i:=1 to k do
  begin
        readln(fi,x,y,cc);
        new(p); p^.urm:=la[y]; p^.x:=x; p^.c:=cc;la[y]:=p;
  end;
 max[0,1]:=1;
 for i:=0 to 3500 do
  begin
        p:=la[i];
        while p<>nil do
         begin
               if max[i,p^.x]<>0 then inc(max[i,p^.x],p^.c);
               p:=p^.urm;
         end;
        for j:=1 to m do
         if i+c[j]<=3500 then
          begin
                if max[i,a[j]]<>0 then
                 if max[i,a[j]]>max[i+c[j],b[j]] then
                  max[i+c[j],b[j]]:=max[i,a[j]];
                if max[i,b[j]]<>0 then
                 if max[i,b[j]]>max[i+c[j],a[j]] then
                  max[i+c[j],a[j]]:=max[i,b[j]];
          end;
        for j:=1 to n do
         if max[i,j]>max[i+1,j]then
          max[i+1,j]:=max[i,j];
  end;
 for i:=1 to nrp do
  begin
        readln(fi,x,y);
        writeln(fo,max[y,x]-1);
  end;
 close(fo);
end.