Pagini recente » Cod sursa (job #973631) | Cod sursa (job #2002193) | Cod sursa (job #1895825) | Cod sursa (job #2886974) | Cod sursa (job #1502263)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define maxC 120000002
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define maxN 152
#define maxT 3502
using namespace std;
int n, m, k, p, x, y, i, j, cost[maxN][maxT], dp[maxN][maxT];
vector < pair < int, int > > V[maxN];
void read()
{
int a, b, c;
freopen("amenzi.in", "r", stdin);
scanf("%d %d %d %d", &n, &m, &k, &p);
while (m --)
{
scanf("%d %d %d", &a, &b, &c);
V[a].pb(mp(b, c));
V[b].pb(mp(a, c));
}
for (i = 1; i <= k; ++ i)
{
scanf("%d %d %d", &a, &b, &c);
cost[a][b] = c;
}
}
void solve()
{
int node, time;
for (j = 0; j < maxT; ++ j)
for (i = 1; i <= n; ++ i)
dp[i][j] = -maxC;
dp[1][0] = cost[1][0];
for (j = 1; j < maxT; ++ j)
for (i = 1; i <= n; ++ i)
{
for (k = 0; k < V[i].size(); ++ k)
{
node = V[i][k].f;
time = V[i][k].s;
if (time <= j && dp[i][j] < max(dp[i][j - 1], dp[node][j - time] + cost[i][j]))
dp[i][j] = max(dp[i][j - 1], dp[node][j - time] + cost[i][j]);
}
}
}
void write()
{
freopen("amenzi.out", "w", stdout);
while (p --)
{
scanf("%d %d", &x, &y);
printf("%d\n", dp[x][y]);
}
}
int main()
{
read();
solve();
write();
return 0;
}