Cod sursa(job #1218095)

Utilizator diana97Diana Ghinea diana97 Data 9 august 2014 15:15:22
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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


const int NMAX = 150 + 1, MMAX = 1500 + 1, TMAX = 3500 + 1;

struct Muchie {
    int nod, cost;
    Muchie (int nod, int cost) {
        this->nod = nod;
        this->cost = cost;
    };
};

int n, m, p, k;

vector <Muchie> v[NMAX];
int amenda[TMAX][NMAX], sol[TMAX][NMAX];

void citeste() {
    f >> n >> m >> p >> k;
    int x, y, c;
    for (int i = 1; i <= m; i++) {
        f >> x >> y >> c;
        v[x].push_back(Muchie(y, c));
        v[y].push_back(Muchie(x, c));
    }
    for (int i = 1; i <=p; i++) {
        f >> x >> y >> c;
        amenda[y][x] += c;
    }
}

void rezolva() {
    for (int i = 0; i < TMAX; i++)
        for (int j = 0; j <= n; j++) sol[i][j] = -1;
    sol[0][1] = amenda[0][1];
    for (int i = 1; i < TMAX; i++) {
        for (int j = 1; j <= n; j++) {
            sol[i][j] = sol[i - 1][j];
            for (vector <Muchie> :: iterator a = v[j].begin(); a != v[j].end(); a++)
                if (i - (*a).cost >= 0) sol[i][j] = max(sol[i][j], sol[i - (*a).cost][(*a).nod]);
            if (sol[i][j] != -1) sol[i][j] += amenda[i][j];
        }
    }
}

void scrie () {
    int x, y;
    for (int i = 1; i <= k; i++) {
        f >> x >> y;
        g << sol[y][x] << '\n';
    }
}

int main () {
    citeste();
    rezolva();
    scrie();
    return 0;
}