Pagini recente » Cod sursa (job #1609417) | Cod sursa (job #2599536) | Cod sursa (job #38649) | Cod sursa (job #1929921) | Cod sursa (job #2109176)
#include <bits/stdc++.h>
#define N 155
#define K 12005
#define M 1505
#define T 3505
using namespace std;
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
struct Edge
{
int noda;
int nodb;
int cost;
};
struct State{
int nod;
int timp;
int suma;
};
vector<Edge> muchii;
int amenzi[N][T];
int dp[T][N];
int n,m,k,p;
int main()
{
fin>>n>>m>>k>>p;
for(int i=1;i<=m;i++)
{
int a,b,c;
fin>>a>>b>>c;
muchii.push_back(Edge{a,b,c});
}
for(int i=1;i<=n;i++)
{
muchii.push_back(Edge{i,i,1});
}
for(int i=0;i<N;i++) for(int j=0;j<T;j++) dp[i][j]=INT_MIN;
for(int i=1;i<=k;i++)
{
int a,b,c;
fin>>a>>b>>c;
amenzi[a][b]+=c;
}
dp[0][1]=0;
for(int i=1;i<=3500;i++)
{
for(auto q:muchii)
{
int noda=q.noda;
int nodb=q.nodb;
int cost=q.cost;
if(i-cost>=0)
{
if(dp[i-cost][nodb]!=INT_MIN)
dp[i][noda]=max(dp[i-cost][nodb]+amenzi[noda][i], dp[i][noda]);
if(dp[i-cost][noda]!=INT_MIN)
dp[i][nodb]=max(dp[i-cost][noda]+amenzi[nodb][i], dp[i][nodb]);
}
}
}
for(int i=1;i<=p;i++)
{
int nod,t;
fin>>nod>>t;
fout<<( (dp[t][nod] != INT_MIN ) ? dp[t][nod]:-1)<<'\n';
}
return 0;
}