Cod sursa(job #3201115)

Utilizator IvanAndreiIvan Andrei IvanAndrei Data 6 februarie 2024 20:11:11
Problema Amenzi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <bits/stdc++.h>

using namespace std;

const long long max_size = 152, max_t = 35e2 + 20;

long long dp[max_size][max_t], amenzi[max_size][max_t];
vector <pair <long long, long long>> mc[max_size];

void solve ()
{
    long long n, m, k, q;
    cin >> n >> m >> k >> q;
    while (m--)
    {
        long long x, y, c;
        cin >> x >> y >> c;
        mc[x].push_back({y, c});
        mc[y].push_back({x, c});
    }
    while (k--)
    {
        long long x, y, c;
        cin >> x >> y >> c;
        amenzi[x][y] += c;
    }
    for (long long i = 2; i <= n; i++)
    {
        dp[i][0] = -1;
    }
    for (long long t = 1; t < max_t; t++)
    {
        for (long long i = 1; i <= n; i++)
        {
            dp[i][t] = dp[i][t - 1];
            for (auto f : mc[i])
            {
                if (f.second > t)
                {
                    continue;
                }
                dp[i][t] = max(dp[i][t], dp[f.first][t - f.second]);
            }
            if (dp[i][t] != -1)
            {
                dp[i][t] += amenzi[i][t];
            }
        }
    }
    while (q--)
    {
        long long x, y;
        cin >> x >> y;
        cout << dp[x][y] << '\n';
    }
    cout << '\n';
}

signed main ()
{
#ifdef LOCAL
    freopen("test.in", "r", stdin);
    freopen("test.out", "w", stdout);
#else
    freopen("amenzi.in", "r", stdin);
    freopen("amenzi.out", "w", stdout);
#endif // LOCAL
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    long long t;
    //cin >> t;
    t = 1;
    while (t--)
    {
        solve();
    }
    return 0;
}