Pagini recente » Cod sursa (job #1179074) | Cod sursa (job #1755002) | Cod sursa (job #2027570) | Cod sursa (job #1854294) | Cod sursa (job #22469)
Cod sursa(job #22469)
#include <stdio.h>
#include <string>
#define KMAX 12001
#define PMAX 8001
#define NMAX 151
#define MMAX 1500
#define TMAX 3501
int N, M, K, P;
int X[MMAX], Y[MMAX], C[MMAX];
int A[TMAX][NMAX];
int Am[TMAX][NMAX];
int tMax;
void solve()
{
A[0][1] = 0;
for (int t = 1; t<=TMAX; ++t)
{
for (int i = 0; i<M; ++i)
{
int src = X[i];
int dest = Y[i];
int cost = C[i];
if (t-cost>=0 && A[t-cost][src] > A[t][dest])
{
A[t][dest] = A[t-cost][src];
}
if (A[t-1][dest] > A[t][dest])
{
A[t][dest] = A[t-1][dest];
}
if (A[t][dest]>=0)
{
A[t][dest] += Am[t][dest];
Am[t][dest] = 0;
}
src = Y[i];
dest = X[i];
if (t-cost>= 0 && A[t-cost][src] > A[t][dest])
{
A[t][dest] = A[t-cost][src];
}
if (A[t-1][dest] > A[t][dest])
{
A[t][dest] = A[t-1][dest];
}
if (A[t][dest]>=0)
{
A[t][dest] += Am[t][dest];
Am[t][dest] = 0;
}
}
int a = t;
}
}
int main()
{
freopen("amenzi.in", "r", stdin);
freopen("amenzi.out", "w", stdout);
memset(A, 0xff, sizeof(A));
scanf("%d %d %d %d", &N, &M, &K, &P);
for (int i = 0; i<M; ++i)
{
int x,y,c;
scanf("%d %d %d", &X[i], &Y[i], &C[i]);
}
for (int i = 0; i<K; ++i)
{
int x,y,c;
scanf("%d %d %d", &x, &y, &c);
Am[y][x] = c;
if (y>tMax)
tMax = y;
}
solve();
for (int i = 0; i<P; ++i)
{
int x,y;
scanf("%d %d", &x, &y);
printf("%d\n", A[y][x]);
}
}