Pagini recente » Cod sursa (job #371496) | Cod sursa (job #2448910) | Cod sursa (job #372399) | Cod sursa (job #1471287) | Cod sursa (job #1008393)
#include <cstdio>
#include <algorithm>
using namespace std;
#define N 151
#define T 3501
struct nod {
int x, cost;
nod *next;
};
nod *a[N];
int dp[T][N];
int cost[N][T];
int n, m, K, P;
inline void add(int p, int q, int c) {
nod *u = new nod;
u->x = q;
u->cost = c;
u->next = a[p];
a[p] = u;
}
int main() {
freopen ("amenzi.in", "r", stdin);
freopen ("amenzi.out", "w", stdout);
scanf ("%d %d %d %d\n", &n, &m, &K, &P);
int i, j, t, p, q, c;
for (i = 1; i <= m; ++i) {
scanf ("%d %d %d\n", &p, &q, &c);
add(p, q, c);
add(q, p, c);
}
for (i = 1; i <= K; ++i) {
scanf ("%d %d %d\n", &p, &q, &c);
cost[p][q] += c;
}
for (t = 0; t < T; ++t)
for (j = 2; j <= n; ++j)
dp[t][j] = -0x3f3f3f3f;
for (t = 1; t < T; ++t)
for (i = 1; i <= n; ++i) {
dp[t][i] = dp[t - 1][i];
for (nod *it = a[i]; it; it = it->next)
if (t - it->cost >= 0)
dp[t][i] = max(dp[t][i], dp[t - it->cost][it->x] + cost[i][t]);
}
for (i = 1; i <= P; ++i) {
scanf ("%d %d\n", &q, &t);
printf ("%d\n", dp[t][q]);
}
}