Cod sursa(job #3234133)

Utilizator DennisJasonOgnean Dennis DennisJason Data 6 iunie 2024 16:43:34
Problema Amenzi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <bits/stdc++.h>
#define NMAX 10001
#define MAX 1001
#define int long long
#define pb push_back
#define eb emplace_back
#define MOD 1000000007
#define nl '\n'
#define INF 10000000007
#define LLONG_MAX 9223372036854775807
#define pii pair<int,int>
#define tpl tuple<int,int,int>
#pragma GCC optimize("O3")
using namespace std;
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
int n,m,k,p;
vector<vector<pii>>G(NMAX);
int dp[3502][152],amenda[3502][152];
bool vis[3502][152];
signed main() {

    fin>>n>>m>>k>>p;
    for(int i=1;i<=m;++i)
    {
        int x,y,c;
        fin>>x>>y>>c;
        G[x].pb({y,c});
        G[y].pb({x,c});
    }
    for(int i=1;i<=k;++i)
    {
        int x,y,c;
        fin>>x>>y>>c;
        y++;
        amenda[y][x]+=c;
    }
    vis[1][1]=1;
    for(int t=1;t<=3051;++t)
    {
        for(int i=1;i<=n;++i)
        {
            for(auto [first,timp]:G[i])
            {
                if(t-timp<=0 ||!vis[t-timp][first])
                    continue;

                vis[t][i]=1;
                dp[t][i]=max(dp[t][i],dp[t-timp][first]);
            }
            vis[t][i]|=vis[t-1][i];
            if(vis[t][i])
                dp[t][i]=max(dp[t][i],dp[t-1][i])+amenda[t][i];
        }
    }

    for(int i=1;i<=p;++i)
    {
        int x,y;
        fin>>x>>y;
        y++;
        if(vis[y][x])
            fout<<dp[y][x]<<nl;
        else
            fout<<-1<<nl;

    }






    return 0;
}