Pagini recente » Cod sursa (job #2968831) | Cod sursa (job #3140230) | Cod sursa (job #1149629) | Cod sursa (job #3275059) | Cod sursa (job #1666240)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define pii pair< int, int >
#define st first
#define nd second
using namespace std;
const int Mn = 160;
const int Mt = 3600;
int n, m, k, p;
int dp[Mn][Mt], ar[Mn][Mt];
vector< pii > g[Mn];
int main()
{
freopen("amenzi.in", "r", stdin);
freopen("amenzi.out", "w", stdout);
scanf("%d %d %d %d", &n, &m, &k, &p);
for (; m; m--)
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
g[a].push_back(pii(b, c));
g[b].push_back(pii(a, c));
}
for (; k; k--)
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
ar[a][b] += c;
}
memset(dp, -1, sizeof(dp));
dp[1][0] = ar[1][0];
for (int i = 1; i < Mt; i++)
for (int j = 1; j <= n; j++)
{
dp[j][i] = dp[j][i - 1];
for (auto it : g[j])
if (i >= it.nd)
dp[j][i] = max(dp[j][i], dp[it.st][i - it.nd]);
if (dp[j][i] != -1)
dp[j][i] += ar[j][i];
}
for (; p; p--)
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", dp[a][b]);
}
return 0;
}