Cod sursa(job #1378986)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 6 martie 2015 15:25:44
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;

ifstream is("amenzi.in");
ofstream os("amenzi.out");

int N, M, K, P, x, y ,z;
int D[155][3505];
int Value[155][3505];
vector <pair<int,int> > Graph[155];

int main()
{
    is >> N >> M >> K >> P;
    for ( int i = 1; i <= M; ++i )
    {
        is >> x >> y >> z;
        Graph[x].push_back(make_pair(y,z));
        Graph[y].push_back(make_pair(x,z));
    }
    for ( int i = 1; i <= K; ++i )
    {
        is >> x >> y >> z;
        Value[x][y] += z;
    }

    for ( int j = 0; j <= 3500; ++j )
        for ( int i = 0; i <= N; ++i )
                D[i][j] = -0x3f3f3f3f;

    D[1][0] = Value[1][0];

    for ( int j = 1; j <= 3500; ++j )
    {
        for ( int i = 1; i <= N; ++i )
        {
            D[i][j] = D[i][j-1] + Value[i][j];
            for ( const auto& v : Graph[i] )
            {
                if ( j >= v.second )
                    D[i][j] = max(D[i][j], D[v.first][j - v.second] + Value[i][j]);
            }

        }
    }
    for ( int i = 1; i <= P; ++i )
    {
        is >> x >> y;
        if ( D[x][y] >= 0 )
            os << D[x][y] << '\n';
        else
            os << "-1\n";
    }
    is.close();
    os.close();
}