Cod sursa(job #1201756)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 25 iunie 2014 22:32:01
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <vector>
#define TMAX 3501
#define DIMN 155

using namespace std;

ifstream f("amenzi.in");
ofstream g("amenzi.out");

vector< pair<int,int> > L[DIMN];
vector< pair<int,int> >::iterator it;

int D[DIMN][TMAX], A[DIMN][TMAX];

int n, m, k, p, x, y, c;

int main () {
    f >> n >> m >> k >> p;
    for (int i=1; i<=m; ++i) {
        f >> x >> y >> c;
        L[x].push_back(make_pair(y,c));
        L[y].push_back(make_pair(x,c));
    }
    for (int i=1; i<=k; ++i) {
        f >> x >> y >> c;
        A[x][y] += c;
    }
    for (int i=0; i<DIMN; ++i)
        for (int j=0; j<TMAX; ++j)
            D[i][j] = -1;
    D[1][0] = 0;
    for (int i=0; i<TMAX; ++i)
        for (int j=1; j<=n; ++j) {
            if (i>0)
                D[j][i] = D[j][i-1];
            for (it=L[j].begin(); it!=L[j].end(); it++)
                if (i >= it->second)
                    D[j][i] = max (D[j][i], D[it->first][i - it->second]);
            if (D[j][i] != -1)
                D[j][i] += A[j][i];

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