Pagini recente » Cod sursa (job #2927187) | Cod sursa (job #530419) | Cod sursa (job #2419228) | Cod sursa (job #2645928) | Cod sursa (job #2766913)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
const int MAXN = 150;
const int MAXT = 3500;
vector<pair<int,int>> G[MAXN];
int add[1 + MAXT][MAXN], dp[1 + MAXT][MAXN];
void max_self(int &x, int y) {
if (x < y)
x = y;
}
int main() {
int n, m, k, p;
fin >> n >> m >> k >> p;
for (int i = 0; i < m; ++i) {
int u, v, w;
fin >> u >> v >> w;
--u, --v;
G[u].emplace_back(v, w);
G[v].emplace_back(u, w);
}
for (int i = 0; i < k; ++i) {
int v, t, c;
fin >> v >> t >> c;
add[t][v - 1] += c;
}
for (int t = 0; t <= MAXT; ++t)
for (int v = 0; v < n; ++v)
dp[t][v] = -1;
dp[0][0] = 0;
for (int t = 1; t <= MAXT; ++t)
for (int u = 0; u < n; ++u) {
dp[t][u] = dp[t - 1][u];
for (auto it : G[u]) {
int v, w;
tie(v, w) = it;
if (t - w >= 0)
max_self(dp[t][u], dp[t - w][v]);
}
if (dp[t][u] >= 0)
dp[t][u] += add[t][u];
}
for (int i = 0; i < p; ++i) {
int v, t;
fin >> v >> t;
fout << dp[t][v - 1] << '\n';
}
fin.close();
fout.close();
return 0;
}