Cod sursa(job #2918351)

Utilizator Iordache_CezarIordache Cezar Iordache_Cezar Data 11 august 2022 11:39:37
Problema Amenzi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <bits/stdc++.h>
#define NMAX 158
#define TMAX 3508
#define KMAX 12008
#define PMAX 8008

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

int n, m, k, p;
int amenda[TMAX][NMAX], dp[TMAX][NMAX];
vector < pair <int, int> > G[NMAX];

int main()
{
    int a, b, c;
    fin >> n >> m >> k >> p;
    for (int i = 1; i <= m; i++)
    {
        fin >> a >> b >> c;
        G[a].push_back({b, c});
        G[b].push_back({a, c});
    }

    for (int i = 1; i <= k; i++)
    {
        fin >> a >> b >> c;
        amenda[b][a] += c;
    }

    for (int t = 0; t <= 3500; t++)
        for (int i = 1; i <= n; i++)
            dp[t][i] = -1e9;
    dp[0][1] = amenda[0][1];
    for (int t = 1; t <= 3500; t++)
        for (int i = 1; i <= n; i++)
        {
            int val = dp[t-1][i];
            for (auto vecin : G[i])
                if (t - vecin.second >= 0)
                    val = max(val, dp[t-vecin.second][vecin.first]);
            if (val >= 0)
            {
                val += amenda[t][i];
                dp[t][i] = val;
            }
        }

    for (int i = 1; i <= p; i++)
    {
        fin >> a >> b;
        if (dp[b][a] == -1e9)
            fout << -1 << '\n';
        else
            fout << dp[b][a] << '\n';
    }
    return 0;
}