Cod sursa(job #10699)

Utilizator vlad_popaVlad Popa vlad_popa Data 28 ianuarie 2007 23:56:18
Problema Amenzi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme 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], n, m, k, p, l, cash[nmax][3501], i, j;

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

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