Cod sursa(job #1553996)

Utilizator elevenstrArina Raileanu elevenstr Data 20 decembrie 2015 19:48:10
Problema Amenzi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("amenzi.in");
ofstream out("amenzi.out");
vector <pair<int,int> > v[1511];
int dp[3506][160],amd[3506][160];
int main()
{
    int N,M,K,P,a,b,c,loc,ora,am;
    in>>N>>M>>K>>P;
    for(int i=1; i<=M; i++)
    {
        in>>a>>b>>c;
        v[a].push_back({b,c});
        v[b].push_back({a,c});
    }
    for(int i=1; i<=K; i++)
    {
        in>>loc>>ora>>am;
        amd[ora][loc]+=am;
    }
    for(int i=0; i<=3506; i++)
        for(int j=1; j<=N; j++)
            dp[i][j]=-1;
    dp[0][1]=0;
    for(int i=1; i<=3506; i++)
        for(int j=1; j<=N; j++)
        {
            for (int k=0; k<v[j].size(); k++)
            {
                int timp=v[j][k].second;
                int nou=v[j][k].first;
                if(i-timp>=0)
                    dp[i][j]=max(dp[i][j],dp[i-timp][nou]);
            }
            //sta pe loc
            if(dp[i][j]>=0)dp[i][j]+=amd[i][j];
        }
    for(int i=1; i<=P; i++)
    {
        in>>a>>b;
        out<<dp[b][a]<<'\n';
        //a=intersectia a, b=ora b
    }
    return 0;
}