Cod sursa(job #1953165)

Utilizator robertpop99Popescu Robert Gabriel robertpop99 Data 4 aprilie 2017 17:52:47
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <cstring>
#define nmax 151
#define tmax 3501
#define qmax 8001
using namespace std;
vector <pair <int , int> > v[nmax];
pair <int,int> q[qmax];
int n,m,p,k,d[nmax][tmax],c[nmax][tmax];
int main()
{   int z,y,x;
    ifstream fin("amenzi.in");
    ofstream fout("amenzi.out");
    fin>>n>>m>>k>>p;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y>>z;
        v[x].push_back(make_pair(y,z));
        v[y].push_back(make_pair(x,z));
    }
    for(int i=1;i<=k;i++)
    {
        fin>>x>>y>>z;
        c[x][y]+=z;
    }
    for(int i=1;i<=p;i++)
    {
        fin>>x>>y;
        q[i].first=x;
        q[i].second=y;

    }
    memset(d,-1,sizeof(d));
    d[1][0]=0;
    for(int t=1;t<=tmax;t++)
        for(int nod=1;nod<=n;nod++)
           {for(auto vecin : v[nod])
                if(t-vecin.second>=0)
                    d[nod][t]=max(d[nod][t],d[vecin.first][t-vecin.second]);
            d[nod][t]=max(d[nod][t],d[nod][t-1]);
            if(d[nod][t]>=0) d[nod][t]+=c[nod][t];

           }

    for(int i=1;i<=p;i++)
        fout<<d[ q[i].first ][ q[i].second ]<<'\n';

    return 0;
}