Pagini recente » Cod sursa (job #2697568) | Cod sursa (job #2939364) | Cod sursa (job #2866648) | Cod sursa (job #2799386) | Cod sursa (job #2236803)
#include <bits/stdc++.h>
using namespace std;
int n, m, k, p;
int d[3505][155];
int am[3505][155];
vector <pair <int, int> > v[155];
inline void wutm8(){
for(int j = 0; j <= 3500 ; ++j)
for(int i = 1; i <= n ; ++i)
d[j][i] = -2000000000;
d[0][1] = am[0][1];
for(int timp = 0; timp < 3500 ; ++timp){
for(int nod = 1; nod <= n ; ++nod){
if(timp > 0){
if(d[timp - 1][nod] >= 0) d[timp][nod] = max(d[timp][nod], d[timp - 1][nod] + am[timp][nod]);
if(d[timp][nod] == d[timp - 1][nod]) continue ;
}
if(d[timp][nod] < 0) continue ;
for(auto it : v[nod]){
if(timp + it.second > 3500) continue ;
d[timp + it.second][it.first] = max(d[timp + it.second - 1][it.first] + am[timp + it.second][it.first], d[timp + it.second][it.first]);
d[timp + it.second][it.first] = max(d[timp + it.second][it.first], d[timp][nod] + am[timp + it.second][it.first]);
}
}
}
}
int main()
{
freopen("amenzi.in", "r", stdin);
freopen("amenzi.out", "w", stdout);
scanf("%d%d%d%d", &n, &m, &k, &p);
int x, y, c;
for(int i = 1; i <= m ; ++i){
scanf("%d%d%d", &x, &y, &c);
v[x].push_back({y, c});
v[y].push_back({x, c});
}
for(int i = 1; i <= k ; ++i){
scanf("%d%d%d", &x, &y, &c);
am[y][x] += c;
}
wutm8();
for(int i = 1; i <= p ; ++i){
scanf("%d%d", &x, &y);
printf("%d\n", max(d[y][x], -1));
}
return 0;
}