Cod sursa(job #10701)

Utilizator vlad_popaVlad Popa vlad_popa Data 29 ianuarie 2007 00:02:01
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>

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

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

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