Cod sursa(job #779701)

Utilizator repp4raduRadu-Andrei Szasz repp4radu Data 18 august 2012 16:03:55
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#include <vector>

#define NMAX 155
#define TMAX 3505
#define INF 0x3f3f3f3f

using namespace std;

vector< pair < int, int > > v[NMAX], meet;
int dp[NMAX][TMAX], amenda[NMAX][TMAX], n, m, k, p;

void citire()
{
    ifstream in("amenzi.in");
    in>>n>>m>>k>>p; int a, b, c;
    for(int i = 1; i <= m; i++)
    {
        in>>a>>b>>c;
        v[a].push_back(make_pair(b, c));
        v[b].push_back(make_pair(a, c));
    }
    for(int i = 1; i <= k; i++)
    {
        in>>a>>b>>c;
        amenda[a][b] += c;
    }
    for(int i = 1; i <= p; i++)
    {
        in>>a>>b;
        meet.push_back(make_pair(a, b));
    }in.close();
}

void init()
{
    for(int i = 1; i <= n; i++)
        for(int j = 0; j < TMAX; j++)
            dp[i][j] = -INF;
    dp[1][0] = amenda[1][0];
}

void afisare()
{
    ofstream out("amenzi.out");
    for(int i = 0; i < meet.size(); i++)
        out<<dp[meet[i].first][meet[i].second]<<"\n";
    out.close();
}

int main()
{
    citire();
    init();
    for(int j = 1; j < TMAX; j++)
        for(int i = 1; i <= n; i++)
        {
            dp[i][j] = dp[i][j - 1];
            for(int h = 0; h < v[i].size(); h++)
                dp[i][j] = max(dp[i][j], (v[i][h].second <= j ? dp[v[i][h].first][j - v[i][h].second] : -INF));
            dp[i][j] += amenda[i][j];
        }
    afisare();
    return 0;
}