Cod sursa(job #1378893)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 6 martie 2015 14:59:11
Problema Amenzi Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 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[151][3501];
int Value[151][3501];
vector <pair<int,int> > Graph[151];

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 i = 1; i <= N; ++i )
        D[i][0] = -1;

    if ( Value[1][0] != 0 )
        D[1][0] = Value[1][0];
    else
        D[1][0] = 0;

    for ( int j = 1; j <= 3500; ++j )
    {
        for ( int i = 1; i <= N; ++i )
        {
            D[i][j] = D[i][j-1];
            for ( const auto& v : Graph[i] )
            {
                if ( j - v.second >= 0 )
                    D[i][j] = max(D[i][j], D[v.first][j - v.second] );
            }
            if ( D[i][j] != -1 )
                D[i][j] += Value[i][j];
        }
    }
    for ( int i = 1; i <= P; ++i )
    {
        is >> x >> y;
        os << D[x][y] << '\n';
    }
    is.close();
    os.close();
}