Pagini recente » Cod sursa (job #130085) | Cod sursa (job #2937016) | Istoria paginii runda/baraj-gimnaziu/clasament | Cod sursa (job #1950635) | Cod sursa (job #2998921)
#include <bits/stdc++.h>
#define NMAX 155
#define pb push_back
using namespace std;
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
int n,m,k,p;
int amenzi[3505][155],dp[3505][155]; /// dp[i][j] -> amenda totala (momentul i, nodul j)
vector<pair<int,int> >g[155];
void read(){
fin>>n>>m>>k>>p;
int x,y,c;
for(int i=1;i<=m;++i){
fin>>x>>y>>c;
g[x].pb({c,y});
g[y].pb({c,x});
}
for(int i=1;i<=k;++i){
fin>>x>>y>>c;
amenzi[y][x]+=c;
}
memset(dp,-1,sizeof dp);
}
void solve(){
dp[0][1]=amenzi[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 x:g[j]){
int moment=x.first;
int directie=x.second;
if(i>=moment)
dp[i][j]=max(dp[i][j],dp[i-moment][directie]);
}
if(dp[i][j]!=-1)
dp[i][j]=dp[i][j]+amenzi[i][j];
}
for(int i=1;i<=p;++i){
int x,y;
fin>>x>>y;
fout<<dp[y][x]<<"\n";
}
}
int main(){
read();
solve();
return 0;
}