Pagini recente » Cod sursa (job #1616711) | Cod sursa (job #807562) | Cod sursa (job #693304) | Cod sursa (job #1091099) | Cod sursa (job #10699)
Cod sursa(job #10699)
#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;
}