Cod sursa(job #1036629)

Utilizator RusuAlexeiRusu Alexei RusuAlexei Data 19 noiembrie 2013 15:04:12
Problema Amenzi Scor 40
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.97 kb
program amenzi;
  type lista=^celula;
       celula=record
                info:longint;
                timp:longint;
                next:lista;
              end;


  var n,m,k,p,i,x,y,z,j,h:longint;
      d:array [1..150,0..150,0..1] of longint;
      a,b:array [1..150,0..3500] of int64;
      r:lista;


begin
  assign(input,'amenzi.in');
  reset(input);

  assign(output,'amenzi.out');
  rewrite(output);


  readln(n,m,k,p);

  for i:=1 to m do
    begin
      readln(x,y,z);
      inc(d[x,0,0]);
      d[x,d[x,0,0],0]:=y;
      d[x,d[x,0,0],1]:=z;
      inc(d[y,0,0]);
      d[y,d[y,0,0],0]:=x;
      d[y,d[y,0,0],1]:=z;


    end;

  for i:=1 to n do
    begin
      inc(d[i,0,0]);
      d[i,d[i,0,0],0]:=i;
      d[i,d[i,0,0],1]:=1;
    end;

  for i:=1 to k do
    begin
      readln(x,y,z);
      b[x,y]:=b[x,y]+z;
    end;

  for i:=0 to 3500 do
    for j:=1 to n do a[j,i]:=-1;
  a[1,0]:=0;
  for i:=1 to 3500 do
    begin
      for j:=1 to n do
        begin
          for h:=1 to d[j,0,0] do
            begin
              if i-d[j,h,1]>=0 then
               if a[d[j,h,0],i-d[j,h,1]]<>-1 then
                if a[d[j,h,0],i-d[j,h,1]]>=a[j,i] then a[j,i]:=a[d[j,h,0],i-d[j,h,1]];
            end;
        {  r:=d[j];
          while (r<>nil) do
            begin
              if i-r^.timp>=0 then
                if a[r^.info,i-r^.timp]<>-1 then
                  if  a[r^.info,i-r^.timp] >=a[j,i] then a[j,i]:= a[r^.info,i-r^.timp];
             r:=r^.next;
           end; }
         { for h:=1 to n do
            begin
              if d[j,h]>0 then
                if (i-d[j,h]>=0)then
                  if (a[h,i-d[j,h]]<>-1) then
                    if a[h,i-d[j,h]]>=a[j,i] then a[j,i]:=a[h,i-d[j,h]];

            end;}

          if a[j,i]<>-1 then a[j,i]:=a[j,i]+b[j,i];
        end;
    end;
  for i:=1 to p do
    begin
      readln(x,y);
      writeln(a[x,y]);
    end;


  close(output);
end.