Pagini recente » Cod sursa (job #1948261) | Cod sursa (job #2849004) | Cod sursa (job #2415435) | Cod sursa (job #1985720) | Cod sursa (job #1786984)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
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() {
ios::sync_with_stdio();
fin.tie(NULL);
int n, m, k, p;
fin >> n >> m >> k >> p;
for(int i = 1; i <= m; i++) {
int a, b, c;
fin >> 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;
fin >> a >> b >> c;
A[a][b] += c;
}
PD(n);
for(int i = 0; i < p; i++) {
int a, b;
fin >> a >> b;
fout << D[a][b] << "\n";
}
return 0;
}