Cod sursa(job #1871663)

Utilizator KronSabau Valeriu Kron Data 7 februarie 2017 16:23:25
Problema Amenzi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#define Nmax 152
using namespace std;
ifstream f("amenzi.in");
ofstream g("amenzi.out");
int n,m,k,p,dp[Nmax][3502],am[Nmax][3502];
vector< pair<int,int> > adj[Nmax];
int main()
{
    f >> n >> m >> k >> p;
    int x,y,c;
    for(int i=0;i<m;i++)
    {
        f >> x >> y >> c;
        adj[x].push_back(make_pair(y,c));
        adj[y].push_back(make_pair(x,c));
    }
    for(int i=1;i<=n;i++)
        adj[i].push_back(make_pair(i,1));

   /* for(int i=0;i<=n;i++)
        for(int j=0;j<=3500;j++)
            dp[i][j]=-1; */
    memset(dp, -1, sizeof(dp));
    for(int i=0;i<k;i++)
    {
        f >> x >> y >> c;
        am[x][y]+=c;
    }
    int loc,time;
    dp[1][0]=0;
    for(int i=1;i<=3500;i++)
    {
        for(int j=1;j<=n;j++)
        {
            for(int k=0;k<adj[j].size();k++)
            {
                loc=adj[j][k].first;
                time=adj[j][k].second;
                if(i-time>=0)
                {
                    dp[j][i]=max(dp[j][i],dp[loc][i-time]);
                }
            }
            if(dp[j][i]!=-1)
                dp[j][i]+=am[j][i];

        }
    }


    for(int i=0;i<p;i++)
    {
        f>>x >>y;
        g << dp[x][y] << "\n";
    }
    return 0;
}