Pagini recente » Cod sursa (job #2932520) | Cod sursa (job #2356237) | Cod sursa (job #2434487) | Cod sursa (job #954148) | Cod sursa (job #3219277)
#include <bits/stdc++.h>
using namespace std;
ifstream in("amenzi.in");
ofstream out("amenzi.out");
const int NMAX = 155;
const int TIMPMAX = 3505;
int dp[NMAX][TIMPMAX], crime[NMAX][TIMPMAX];
int n, m, k, p;
struct HeapNode{
int next, cost;
};
vector <HeapNode> g[NMAX];
void precal_dp(){
for( int timp = 0; timp < TIMPMAX; timp++ )
for( int i = 1; i <= n; i++ )
dp[i][timp] = -1;
dp[1][0] = 0;
for( int timp = 1; timp < TIMPMAX; timp++ ){
for( int i = 1; i <= n; i++ ){
dp[i][timp] = dp[i][timp-1];
for( auto vecin : g[i] )
if( timp >= vecin.cost )
dp[i][timp] = max( dp[i][timp], dp[vecin.next][timp - vecin.cost]);
if( dp[i][timp] != -1 )
dp[i][timp] += crime[i][timp];
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
in >> n >> m >> k >> p;
for( int i = 0; i < m; i++ ){
int a, b, c;
in >> a >> b >> c;
g[a].push_back({b, c});
g[b].push_back({a, c});
}
for( int i = 0; i < k; i++ ){
int a, b, c;
in >> a >> b >> c;
crime[a][b] += c;
}
precal_dp();
while( p-- ){
int a, b;
in >> a >> b;
out << dp[a][b] << "\n";
}
return 0;
}