Cod sursa(job #3147427)

Utilizator ililogIlinca ililog Data 26 august 2023 11:14:29
Problema Amenzi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
using namespace std;
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>

ifstream fin("amenzi.in");
ofstream fout("amenzi.out");

int n, m, k, p;
vector< vector<pair<int,int>>> muchii;
int amenzi[151][3501];
int dp[151][3501];

int main() {
    
    fin >> n >> m >> k >> p;
    
    muchii.resize(n+1);
    
    for (int i = 1; i<=m; i++) {
        int a, b, c;
        fin >> a >> b >> c;
        muchii[a].push_back({b, c});
        muchii[b].push_back({a, c});
    }
    
    for (int i = 1; i<=k; i++) {
        int a, b, c;
        fin >> a >> b >> c;
        amenzi[a][b] += c;
    }
    
    for (int i = 1; i<=n; i++) {
        for (int j = 0; j<=3500; j++) {
            dp[i][j] = -1;
        }
    }
    
    dp[1][0] = amenzi[1][0];
    
    for (int t = 1; t<=3500; t++) {
        for (int i = 1; i<=n; i++) {
            
            for (int x = 0; x<muchii[i].size(); x++) {
                pair<int,int> nod = muchii[i][x];
                
                if (t-nod.second >= 0) {
                    dp[i][t] = max(dp[i][t], dp[nod.first][t-nod.second]);
                }
               
            }
            dp[i][t] = max(dp[i][t], dp[i][t-1]);
            
            if (dp[i][t] >= 0) {
                dp[i][t] += amenzi[i][t];
            }
            
        }
    }
    
    
    for (int i = 1; i<=p; i++) {
        int a, b;
        fin >> a >> b;
        fout << dp[a][b] << "\n";
    }
    
    return 0;
}