Pagini recente » Cod sursa (job #603251) | Cod sursa (job #396732) | Cod sursa (job #1918083) | Cod sursa (job #10870) | Cod sursa (job #10824)
Cod sursa(job #10824)
#include <stdio.h>
#define MAX(a, b) ( (a) < (b) ? (b) : (a) )
#define NMAX 152
#define TMAX 3502
#define INF 1000000001
int V[NMAX][NMAX];
int Cost[NMAX][NMAX];
int A[TMAX][NMAX];
int Amenda[TMAX][NMAX];
int i, j, N, M, K, P;
int x, y, z, c, t, k;
int oras, time;
int main()
{
freopen("amenzi.in", "r", stdin);
freopen("amenzi.out", "w", stdout);
scanf("%d %d %d %d", &N, &M, &K, &P);
for (i = 0; i <= N; i++)
for (j = 0; j <= N; j++) Cost[i][j] = -INF;
for (i = 1; i <= M; i++)
{
scanf("%d %d %d", &x, &y, &z);
V[x][++V[x][0]] = y;
V[y][++V[y][0]] = x;
Cost[x][y] = z;
Cost[y][x] = z;
}
for (i = 1; i <= K; i++)
{
scanf("%d %d %d", &x, &y, &z);
Amenda[y][x] += z;
}
for(t = 0; t <= TMAX - 1; t++)
for(i = 0; i <= N; i++) A[t][i] = -INF;
A[0][1] = 0;
for (t = 0; t <= TMAX - 1; t++)
{
for (j = 1; j <= N; j++)
for (k = 1; k <= V[j][0]; k++)
{
i = V[j][k];
c = Cost[j][i];
if (t-c >= 0 && (A[t-c][j] >= 0 || A[t-1][i] >= 0)) A[t][i] = MAX ( MAX (A[t-c][j], A[t-1][i]) + Amenda[t][i], A[t][i]);
}
//printare();
}
for (i = 1; i <= P; i++)
{
scanf("%d %d", &oras, &time);
printf("%d\n", A[time][oras]);
}
return 0;
}