Cod sursa(job #2998921)

Utilizator DKMKDMatei Filibiu DKMKD Data 10 martie 2023 11:30:14
Problema Amenzi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#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;
}