Cod sursa(job #9814)

Utilizator vlad_popaVlad Popa vlad_popa Data 27 ianuarie 2007 16:59:30
Problema Amenzi Scor 30
Compilator cpp Status done
Runda Unirea 2007, clasele 11-12 Marime 1.08 kb
#include <stdio.h>

#define FIN "amenzi.in"
#define FOUT "amenzi.out"
#define nmax 151

int a[nmax][nmax], s[nmax][3501], i, j, n, m, k, p, x, y, z, l, max, cash[nmax][3501];

int
 main ()
{
  freopen (FIN, "rt", stdin);
  freopen (FOUT, "wt", stdout);

  scanf ("%d%d%d%d", &n, &m, &k, &p);
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++)
      a[i][j] = -20000;
  for (i = 1; i <= m; i++)
   {
     scanf ("%d%d%d", &x, &y, &z);
     a[x][y] = a[y][x] = z;
   }
  //for (i = 1; i <= n; i++)
   // a[i][i] = 0;
  for (i = 1; i <= k; i++)
   {
     scanf ("%d%d%d", &x, &y, &z);
     cash[x][y] = z;
   }
  for (j = 0; j <= 3501; j++)
    for (i = 1; i <= n; i++)
     {
       max = 0;
       if (j > 0)
         s[i][j] = s[i][j-1];
       for (l = 1; l <= n; l++)
         if (a[l][i] > 0)
           if (j - a[l][i] >= 0 && s[i][j] < s[l][j-a[l][i]])
             s[i][j] = s[l][j-a[l][i]];
        s[i][j] += cash[i][j];
     }
  for (i = 1; i <= p; i++)
   {
     scanf ("%d%d", &x, &y);
     printf ("%d\n", s[x][y]);
   }
  return 0;
}