Pagini recente » Cod sursa (job #1084346) | Cod sursa (job #167701) | Cod sursa (job #2517711) | Cod sursa (job #676904) | Cod sursa (job #1786994)
#include <bits/stdc++.h>
using namespace std;
const int NMax = 150 + 5;
const int LIM = 3500;
vector < pair < int, int > > G[NMax];
int D[NMax][3505];
int A[NMax][3505];
inline void PD(const int &n) {
memset(D, -1, sizeof(D));
D[1][0] = 0;
for(auto it: G[1]) D[it.first][it.second] = max(D[it.first][it.second], 0);
for(int i = 1; i <= LIM; i++) {
for(int j = 1; j <= n; j++) {
D[j][i] = max(D[j][i], D[j][i - 1]);
if(D[j][i] >= 0) D[j][i] += A[j][i];
if(D[j][i] != -1){
for(auto it: G[j]) {
if(it.second + i > LIM) continue;
D[it.first][it.second + i] = max(0, max(D[j][i], D[it.first][it.second + i]));
}
}
}
}
}
int main() {
freopen("amenzi.in", "r", stdin);
freopen("amenzi.out", "w", stdout);
ios::sync_with_stdio();
cin.tie(NULL);
int n, m, k, p;
scanf("%d %d %d %d", &n, &m, &k, &p);
for(int i = 1; i <= m; i++) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
G[a].push_back({b, c});
G[b].push_back({a, c});
}
for(int i = 1; i <= k; i++) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
A[a][b] += c;
}
PD(n);
for(int i = 0; i < p; i++) {
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", D[a][b]);
}
return 0;
}