Pagini recente » Cod sursa (job #18681) | Cod sursa (job #879860) | Cod sursa (job #1875832) | Cod sursa (job #863900) | Cod sursa (job #2449136)
#include <bits/stdc++.h>
#define pii pair<int, int>
///N=150
///M=1500
///T=3500
using namespace std;
int n, m, k, p, i, j, t=-1;
int sol[151][3501], costs[151][3501];
vector<pii> graph[151];
pii pairs[8001];
///
void read();
void solve();
void write();
int main()
{
read();
solve();
write();
return 0;
}
void read(){
freopen("amenzi.in", "r", stdin);
scanf("%d%d%d%d", &n, &m, &k, &p);
for(i=1; i<=m; ++i){
int x, y, c;
scanf("%d%d%d", &x, &y, &c);
graph[x].push_back({y, c});
}
for(i=1; i<=k; ++i){
int x, y, c;
scanf("%d%d%d", &x, &y, &c);
costs[x][y]+=c;
}
for(i=1; i<=p; ++i){
int x, y;
scanf("%d%d", &x, &y);
t=max(t, y);
pairs[i]={x, y};
}
fclose(stdin);
}
void solve(){
sol[1][0]=1;
for(i=1; i<=t; ++i){
for(j=1; j<=n; ++j){
sol[j][i]=max(sol[j][i], sol[j][i-1]);
for(auto next:graph[j]) {
if(i-next.second<0) continue;
sol[j][i]=max(sol[j][i], sol[next.first][i-next.second]);
sol[next.first][i]=max(sol[next.first][i], sol[j][i-next.second]);
}
if(sol[j][i]>0) sol[j][i]+=costs[j][i];
}
}
}
void write(){
freopen("amenzi.out", "w", stdout);
for(i=1; i<=p; ++i) printf("%d\n", sol[pairs[i].first][pairs[i].second]-1);
fclose(stdout);
}