Pagini recente » Cod sursa (job #1500409) | Cod sursa (job #2981811) | Cod sursa (job #599798) | Cod sursa (job #689128) | Cod sursa (job #1758464)
#include <bits/stdc++.h>
#define Nmax 152
#define Tmax 3502
#define pb(x) push_back(x)
#define pii pair <int, int>
#define mp make_pair
#define f first
#define s second
FILE *fin = freopen("amenzi.in", "r", stdin);
FILE *fut = freopen("amenzi.out", "w", stdout);
using namespace std;
int n, m, k, p, fine[Tmax][Nmax];
vector <pii> G[Nmax];
bool b[Tmax][Nmax];
int Max(int x, int y)
{
if(x > y)
return x;
return y;
}
void read()
{
int x, y, c;
scanf("%d %d %d %d", &n, &m, &k, &p);
while(m --)
{
scanf("%d %d %d", &x, &y, &c);
G[x].pb(mp(y, c));
G[y].pb(mp(x, c));
}
while(k --)
{
scanf("%d %d %d", &x, &y, &c);
fine[y][x] += c;
}
}
void solve()
{
int val;
/// initialize
b[0][1] = 1;
for(int t = 0; t < Tmax - 1; ++ t)
for(int x = 1; x <= n; ++ x)
{
val = 0;
if(t >= 1)
if(b[t - 1][x])
{
val = fine[t - 1][x];
b[t][x] = 1;
}
for(int k = 0; k < G[x].size(); ++ k)
{
pii y = G[x][k];
if(t - y.s >= 0)
if(b[t - y.s][y.f])
{
val = Max(val, fine[t - y.s][y.f]);
if(!b[t][x])
b[t][x] = 1;
}
}
fine[t][x] += val;
}
}
void write()
{
int x, t;
while(p --)
{
scanf("%d %d", &x, &t);
if(b[t][x]) printf("%d\n", fine[t][x]);
else printf("-1\n");
}
}
int main()
{
read();
solve();
write();
return 0;
}