Pagini recente » Cod sursa (job #1631060) | Cod sursa (job #396109) | Cod sursa (job #975253) | Cod sursa (job #2354341) | Cod sursa (job #2241061)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("amenzi.in");
ofstream cout ("amenzi.out");
const int INF = -2e9;
const int NMAX = 150;
const int TMAX = 3500;
typedef pair <int, int> pii;
int n, m, k, p, x, y, c;
vector <pii> g[1 + NMAX];
int v[1 + TMAX][1 + NMAX], dp[1 + TMAX][1 + NMAX];
void precalc() {
for(int i = 0; i <= TMAX; i++) {
for(int j = 1; j <= n; j++)
dp[i][j] = INF;
}
dp[0][1] = v[0][1];
for(int i = 0; i < TMAX; i++) {
for(int j = 1; j <= n; j++) {
if(i) {
if(dp[i - 1][j] >= 0)
dp[i][j] = max(dp[i][j], dp[i - 1][j] + v[i][j]);
if(dp[i][j] == dp[i - 1][j])
continue;
}
if(dp[i][j] < 0)
continue;
for(auto it : g[j]) {
if(i + it.second > TMAX)
continue;
dp[i + it.second][it.first] = max(dp[i + it.second][it.first], dp[i + it.second - 1][it.first] + v[i + it.second][it.first]);
dp[i + it.second][it.first] = max(dp[i + it.second][it.first], dp[i][j] + v[i + it.second][it.first]);
}
}
}
}
int main() {
cin >> n >> m >> k >> p;
for(int i = 1; i <= m; i++) {
cin >> x >> y >> c;
g[x].push_back({y, c});
g[y].push_back({x, c});
}
for(int i = 1; i <= k; i++) {
cin >> x >> y >> c;
v[y][x] += c;
}
precalc();
for(int i = 1; i <= p; i++) {
cin >> x >> y;
cout << max(dp[y][x], -1) << "\n";
}
return 0;
}