Pagini recente » Cod sursa (job #1058729) | Cod sursa (job #2928824) | Cod sursa (job #1513114) | Cod sursa (job #1401119) | Cod sursa (job #2540890)
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
const int MAXN = 155, MAXT = 3510;
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
int dp[MAXT][MAXN], tick[MAXT][MAXN], n, m, k, p;
vector<pair<int, int>> graph[MAXN];
void initialize()
{
for (int i = 0; i < MAXT; ++i)
for (int j = 0; j < MAXN; ++j)
dp[i][j] = -1;
}
void read()
{
fin >> n >> m >> k >> p;
for (int i = 0; i < m; ++i) {
int x, y, c;
fin >> x >> y >> c;
graph[x].pb({y, c});
graph[y].pb({x, c});
}
for (int i = 0; i < k; ++i) {
int x, y, val;
fin >> x >> y >> val;
tick[y][x] = val;
}
}
void solve()
{
dp[0][1] = 0;
for (int i = 1; i < MAXT; ++i)
for (int j = 1; j <= n; ++j) {
dp[i][j] = dp[i - 1][j];
for (const auto& it: graph[j])
if (i - it.second >= 0)
dp[i][j] = max(dp[i][j], dp[i - it.second][it.first]);
if (dp[i][j] >= 0)
dp[i][j] += tick[i][j];
}
}
void print()
{
for (int i = 0; i < p; ++i) {
int x, y;
fin >> x >> y;
fout << dp[y][x] << '\n';
}
}
int main()
{ initialize();
read();
solve();
print();
return 0;
}