Pagini recente » Cod sursa (job #1748690) | Cod sursa (job #839396) | Cod sursa (job #1768706) | Cod sursa (job #1332158) | Cod sursa (job #1553019)
#include <cstdio>
#include <algorithm>
#include <vector>
#define f first
#define s second
#define INF 2000000000
using namespace std;
int D[3501][151], A, B, C, N, M, K, P;
vector <pair <int, int> > E[151];
vector <int> L[3501][151];
int main () {
freopen ("amenzi.in" ,"r", stdin );
freopen ("amenzi.out","w", stdout);
scanf ("%d %d %d %d", &N, &M, &K, &P);
for (int i = 1; i <= M; i ++) {
scanf ("%d %d %d", &A, &B, &C);
E[A].push_back(make_pair(B, C));
E[B].push_back(make_pair(A, C));
}
for (int i = 1; i <= K; i ++) {
scanf ("%d %d %d", &A, &B, &C);
L[B][A].push_back(C);
}
for (int t = 0; t <= 3500; t ++) {
for (int i = 1; i <= N; i ++) {
if (t == 0 && i == 1)
D[t][i] = 0;
else
D[t][i] = -INF;
if (t)
D[t][i] = max (D[t][i], D[t-1][i]);
vector <pair <int, int> > :: iterator it;
for (it = E[i].begin(); it != E[i].end(); it ++) {
pair <int, int> j = *it;
if (t - j.s >= 0)
D[t][i] = max (D[t][i], D[t-j.s][j.f]);
}
vector <int> :: iterator it2;
for (it2 = L[t][i].begin(); it2 != L[t][i].end(); it2 ++) {
int j = *it2;
D[t][i] += j;
}
}
}
for (int i = 1; i <= P; i ++) {
scanf ("%d %d", &A, &B);
if (D[B][A] < 0)
printf ("-1\n");
else
printf ("%d\n", D[B][A]);
}
return 0;
}