Pagini recente » Cod sursa (job #2859389) | Cod sursa (job #14513) | Cod sursa (job #1690384) | Cod sursa (job #1210804) | Cod sursa (job #1473454)
#include <iostream>
#include <cstdio>
#include <vector>
#define minusoo -1
#define maxT 3500
#define dim 8192
char ax[dim];
int pz;
void cit(int &x) {
x = 0;
while (ax[pz] < '0' || ax[pz] > '9') {
++pz;
if (pz == dim) fread(ax, 1, dim, stdin), pz = 0;
}
while (ax[pz] >= '0' && ax[pz] <= '9') {
x = x * 10 + ax[pz++] - '0';
if (pz == dim) fread(ax, 1, dim, stdin), pz = 0;
}
}
using namespace std;
struct drum {
int end, cost;
drum () {};
drum (int e, int c): end(e), cost(c) {};
};
struct meet {
int n, t;
meet () {};
meet (int n, int t): n(n), t(t) {};
};
vector<drum> nodes[3501];
int N, M, K, P, i, m, j, s, e, c, t;
int dp[3501][151];
int cost[3501][151];
int main() {
freopen("amenzi.in", "r", stdin);
freopen("amenzi.out", "w", stdout);
cit(N), cit(M), cit(K), cit(P);
for (i = 1; i <= M; i++) {
cit(s), cit(e), cit(c);
nodes[s].push_back(drum(e, c));
nodes[e].push_back(drum(s, c));
}
for (i = 1; i <= K; i++) {
cit(s), cit(t), cit(c);
cost[t][s] += c;
}
for (t = 0; t <= maxT; t++) {
for (i = 2; i <= N; i++) {
dp[t][i] = minusoo;
}
}
for (t = 1; t <= maxT; t++) {
for (i = 1; i <= N; i++) {
dp[t][i] = dp[t - 1][i];
for(vector<drum>::iterator it = nodes[i].begin(); it != nodes[i].end(); it++) {
if ((*it).cost <= t) dp[t][i] = max(dp[t][i], dp[t - (*it).cost][(*it).end]);
}
if (dp[t][i] != minusoo)
dp[t][i] += cost[t][i];
}
}
for (i = 1; i <= P; i++) {
cit(s), cit(t);
printf("%d\n", dp[t][s]);
}
}