Pagini recente » Cod sursa (job #2589573) | Cod sursa (job #2135712) | Cod sursa (job #1643373) | Cod sursa (job #2469697) | Cod sursa (job #2513980)
#include <bits/stdc++.h>
using namespace std;
ifstream f("amenzi.in");
ofstream g("amenzi.out");
const int NMAX = 155;
const int TMAX = 3505;
int dp[TMAX][NMAX],val[TMAX][NMAX];
vector < pair < int, int > > v[NMAX];
int main()
{
int n,m,k,p;
f >> n >> m >> k >> p;
for(int i = 1 ; i <= m ; i++)
{
int x,y,z;
f >> x >> y >> z;
v[x].push_back({y,z});
v[y].push_back({x,z});
}
for(int i = 1 ; i <= k ; i++)
{
int x,y,z;
f >> x >> y >> z;
val[y][x] += z;
}
for(int i = 0 ; i <= 3500 ; i++)
for(int j = 0 ; j <= n ; j++)
dp[i][j] = -1;
dp[0][1] = val[0][1];
for(int i = 1 ; i <= 3500 ; i++)
for(int j = 1 ; j <= n ; j++)
{
dp[i][j] = dp[i - 1][j];
for(auto it: v[j])
{
int next = it.first, c = it.second;
if(i >= c)
dp[i][j]= max(dp[i][j], dp[i - c][next]);
}
if(dp[i][j] != -1)
dp[i][j] += val[i][j];
}
for(int i = 1 ; i <= p ; i++)
{
int x,y;
f >> x >> y;
g << dp[y][x] << "\n";
}
return 0;
}