Pagini recente » Cod sursa (job #2065048) | Cod sursa (job #721333) | Cod sursa (job #3220149) | Cod sursa (job #3255302) | Cod sursa (job #1218095)
#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;
}