Pagini recente » Cod sursa (job #1529063) | Cod sursa (job #2633588) | Cod sursa (job #100439) | Cod sursa (job #967471) | Cod sursa (job #1087112)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
#define NMAX 151
#define TMAX 3501
int i, j, N, M, K, P;
int a, b, c;
int X, Y;
int tmax;
int dp[TMAX][NMAX];
struct nod {
int u;
int Cost;
nod *next;
};
nod *v[NMAX];
bool Used[NMAX];
int A[TMAX][NMAX];
inline void add(int i, int j, int c) {
nod *p = new nod;
p->u = j;
p->Cost = c;
p->next = v[i];
v[i] = p;
}
int main() {
fin >> N >> M >> K >> P;
for (i = 1; i <= M; ++i) {
fin >> a >> b >> c;
add(a, b, c);
add(b, a, c);
}
//for (i = 1; i <= N; ++i)
// add(i, i, 1);
for (i = 1; i <= K; ++i) {
fin >> a >> b >> c;
A[b][a] += c;
}
for (i = 0; i < TMAX; ++i)
for (j = 0; j <= N; ++j)
dp[i][j] = -1;
dp[0][1] = A[0][1];
for (i = 1; i < TMAX; ++i) {
for (j = 1; j <= N; ++j) {
dp[i][j] = max(dp[i][j], dp[i - 1][j]);
for (nod *k = v[j]; k; k = k->next) {
if (i - k->Cost >= 0)
dp[i][j] = max(dp[i][j], dp[i - k->Cost][k->u]);
}
if (dp[i][j] == -1) continue;
dp[i][j] += A[i][j];
}
}
for (i = 1; i <= P; ++i) {
fin >> X >> Y;
fout << dp[Y][X] << '\n';
}
return 0;
}