Pagini recente » Cod sursa (job #1740666) | Cod sursa (job #900641) | Cod sursa (job #671267) | Cod sursa (job #2890574) | Cod sursa (job #603829)
Cod sursa(job #603829)
# include <cstdio>
# include <vector>
using namespace std;
const char *FIN = "amenzi.in", *FOU = "amenzi.out";
const int MAX_N = 151, MAX_T = 3501;
int A[MAX_N][MAX_T], B[MAX_N][MAX_T];
vector < pair <int, int> > G[MAX_N];
int N, M, K, P;
int main (void) {
freopen (FIN, "r", stdin);
freopen (FOU, "w", stdout);
scanf ("%d %d %d %d", &N, &M, &K, &P);
for (int i = 1, a, b, c; i <= M; ++i) {
scanf ("%d %d %d", &a, &b, &c);
G[a].push_back (make_pair (b, c));
G[b].push_back (make_pair (a, c));
}
for (int i = 1, a, b, c; i <= K; ++i) {
scanf ("%d %d %d", &a, &b, &c);
B[a][b] += c;
}
for (int i = 2; i <= N; ++i)
A[i][0] = -1;
for (int j = 1; j < MAX_T; ++j) {
for (int i = 1; i <= N; ++i) {
A[i][j] = A[i][j - 1];
for (int k = 0, l = G[i].size (); k < l; ++k) {
pair <int, int> ind = G[i][k];
if (j >= ind.second && A[ind.first][j - ind.second] > A[i][j])
A[i][j] = A[ind.first][j - ind.second];
}
if (A[i][j] != -1) A[i][j] += B[i][j];
}
}
for (int i = 1, a, b; i <= P; ++i) {
scanf ("%d %d", &a, &b);
printf ("%d\n", A[a][b]);
}
}