Cod sursa(job #24601)

Utilizator vladcyb1Vlad Berteanu vladcyb1 Data 2 martie 2007 23:38:43
Problema Amenzi Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.94 kb

  const
       FIN = 'amenzi.in';
       FOUT = 'amenzi.out';
       NMAX = 151;
       TMAX = 3502;

  type
      time_matrix = array[ 0..NMAX, 0..TMAX ] of longint;
      graph = array[ 0..NMAX, 0..NMAX ] of longint;

  var
     S, T : time_matrix;
     PX, PY : array[ 1..8000 ] of longint;
     A, COST : graph;
     f, g : text;
     N, M, K, P, maxt : longint;

 procedure read_data;
  var i, x, y, c : longint;
  begin
   assign( f, FIN ); reset( f ) ; readln( f, N, M, K, P );
   for i := 1 to M do
     begin
       readln( f, x, y, c );
       inc( A[x,0] ); A[ x, A[x,0] ] := y; COST[ x, y ] := c;
       inc( A[y,0] ); A[ y, A[y,0] ] := x; COST[ y, x ] := c;
     end;
   for i := 1 to K do
     begin
      readln( f, x, y, c );
      inc( S[ x, y ], c );
     end;
     maxt := 0;
  for i := 1 to P do
    begin
     readln( f, PX[i], PY[i] );
     if PY[i] > maxt then maxt := PY[i];
    end;
 end;

 function max( a, b : longint ) : longint;
  begin
   if a > b then max := a else max := b;
  end;

 procedure dinamica;
  var i, j, k, nod : longint;
  begin
    for i := 1 to N do T[ i, 0 ] := -1;
    T[ 1, 0 ] := S[ 1, 0 ];
    for i := 1 to maxt do
     for j := 1 to N do
        begin
          T[ j, i ] := -1;
          if T[ j, i - 1 ] <> - 1 then T[ j, i ] := T[ j, i - 1 ] + S[ j, i ];
          for  k := 1 to A[j][0] do
             begin
               nod := A[j][k];
               if ( i - cost[ j, nod ] > -1 ) then
               if ( cost[ j, nod ] > 0 ) and ( T[ nod, i - cost[j,nod] ] <> - 1 ) then
               T[ j, i ] := MAX( T[ j, i ], T[ nod, i - cost[ j, nod ] ] + S[ j, i ] );
              end;
         end;
 end;

 procedure save;
  var i, x, y : longint;
  begin
   assign( g, FOUT ); rewrite( g );
   for i := 1 to P do
     writeln( g, T[Px[i],Py[i]] );
   close( f );
   close( g );
  end;

   begin
    read_data;
    dinamica;
    save;
   end.