Cod sursa(job #2109183)

Utilizator MithrilBratu Andrei Mithril Data 19 ianuarie 2018 11:43:32
Problema Amenzi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <bits/stdc++.h>
#define N 155
#define K 12005
#define M 1505
#define T 3505
using namespace std;

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

struct State{
    int nod;
    int timp;
    int suma;
};

vector<Edge> muchii;
int amenzi[N][T];
int dp[T][N];
int n,m,k,p;

int main()
{
    fin>>n>>m>>k>>p;
    for(int i=1;i<=m;i++)
    {
        int a,b,c;
        fin>>a>>b>>c;
        muchii.push_back(Edge{a,b,c});
    }
    for(int i=1;i<=n;i++)
    {
        muchii.push_back(Edge{i,i,1});
    }
    for(int i=0;i<N;i++) for(int j=0;j<T;j++) dp[i][j]=INT_MIN;
    for(int i=1;i<=k;i++)
    {
        int a,b,c;
        fin>>a>>b>>c;
        amenzi[a][b]+=c;
    }

    dp[0][1]=0;
    for(int i=1;i<=3500;i++)
    {
        for(auto q:muchii)
        {
            int noda=q.noda;
            int nodb=q.nodb;
            int cost=q.cost;
            if(i-cost>=0)
            {
                if(dp[i-cost][nodb]!=INT_MIN)
                    dp[i][noda]=max(dp[i-cost][nodb]+amenzi[noda][i], dp[i][noda]);
                if(dp[i-cost][noda]!=INT_MIN)
                    dp[i][nodb]=max(dp[i-cost][noda]+amenzi[nodb][i], dp[i][nodb]);
            }
        }
    }

    for(int i=1;i<=p;i++)
    {
        int nod,t;
        fin>>nod>>t;
        fout<<( (dp[t][nod] != INT_MIN ) ? dp[t][nod]:-1)<<'\n';
    }
    return 0;
}