Pagini recente » Cod sursa (job #1087574) | Cod sursa (job #683397) | Cod sursa (job #1108140) | Cod sursa (job #2735268) | Cod sursa (job #129327)
Cod sursa(job #129327)
#include <cstdio>
#include <cstring>
using namespace std;
#define FIN "amenzi.in"
#define FOUT "amenzi.out"
#define N_MAX 155
#define M_MAX 1505
#define INF 10000000
int A[M_MAX << 1][N_MAX];
int T[M_MAX << 1][N_MAX];
int a[M_MAX];
int b[M_MAX];
int c[M_MAX];
int N, M, k, p, i, t, x, y;
inline int maxim(int a, int b) {if (a > b) return a; else return b;}
void solve()
{
int i, j;
memset(A, -INF, sizeof(A));
// dinamica
A[0][1] = T[0][1];
for(i = 1; i < M_MAX << 1; ++i)
{
for(j = 1; j <= M; ++j)
{
A[i][a[j]] = maxim(A[i][a[j]], A[i - 1][a[j]]);
if(i - c[j] >= 0) A[i][a[j]] = maxim(A[i][a[j]], A[i - c[j]][b[j]]);
A[i][b[j]] = maxim(A[i][b[j]], A[i - 1][b[j]]);
if(i - c[j] >= 0) A[i][b[j]] = maxim(A[i][b[j]], A[i - c[j]][a[j]]);
}
for(j = 1; j <= N; ++j) A[i][j] += T[i][j];
}
}
int main()
{
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d %d %d %d", &N, &M, &k, &p);
for(i = 1; i <= M; ++i)
scanf("%d %d %d", a + i, b + i, c + i);
for(i = 1; i <= k; ++i) {
scanf("%d %d %d", &x, &t, &y);
T[t][x] += y;
}
solve();
for(i = 0; i < p; ++i)
{
scanf("%d %d", &x, &y);
printf("%d\n", A[y][x]);
}
return 0;
}