Cod sursa(job #10333)

Utilizator bigsarpeadrian bigsarpe Data 28 ianuarie 2007 12:18:21
Problema Amenzi Scor 10
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.48 kb
const maxn=150;maxtimp=3501;maxtest=8000;
type pnod=^tnod;tnod=record nod,timp:longint;next:Pnod;end;
var t:TExt;
   G:array[0..maxn]of pnod;cur:Pnod;
   V,kapa:Array[0..maxtimp,0..maxn]of longint;
   Poras,Ptimp:Array[0..maxtest]of longint;
   costnou,orasnou,timpnou,timp,oras,n,m,k,p,i,a,b,c:longint;
{   function max(a,b:longint):longint;begin if a>b then max:=a else max:=b;end;}
begin
   assign(t,'amenzi.in');reset(t);readln(t,n,m,k,p);
   for i:=1 to M do
   begin
      readln(t,a,b,c);
      new(cur);cur^.timp:=c;cur^.nod:=a;cur^.next:=G[b];G[b]:=cur;
      new(cur);cur^.timp:=c;cur^.nod:=b;cur^.next:=G[a];G[a]:=cur;
   end;
   for i:=1 to K do begin readln(t,a,b,c);{kapa[b,a]:=}inc(kapa[b,a],c);end;
   for i:=1 to P do readln(t,Poras[i],Ptimp[i]);close(T);
   for timp:=0 to maxtimp do for oras:=1 to N do V[timp,oras]:=-1;V[0,1]:=0;
   for timp:=0 to maxtimp-1 do for oras:=1 to N do if V[timp,oras]>=0 then
   begin
      if V[timp+1,oras]<V[timp,oras] then V[timp+1,oras]:=V[timp,oras]+Kapa[timp+1,oras];
      cur:=G[oras];
      while cur<>nil do
      begin
         orasnou:=cur^.nod;timpnou:=timp+cur^.timp;
         if (timpnou<=maxtimp) then
         begin
            costnou:=Kapa[timpnou,orasnou]+V[timp,oras];
            if costnou>V[timpnou,orasnou] then V[timpnou,orasnou]:=costnou;
         end;
         cur:=cur^.next;
      end;
   end;
   assign(t,'amenzi.out');rewrite(T);
   for i:=1 to P do writeln(t,V[Ptimp[i],Poras[i]]);close(T);
end.