Pagini recente » Cod sursa (job #1891703) | Cod sursa (job #556452) | Cod sursa (job #1628905) | Cod sursa (job #611467) | Cod sursa (job #10905)
Cod sursa(job #10905)
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
#define PB push_back
#define MP make_pair
const int NMAX = 154;
const int TMAX = 3636;
const int INF = 0x3f3f3f3f;
int N, M, K, P;
vector <pair <int, int> > G[NMAX];
int T[NMAX][TMAX];
int DP[NMAX][TMAX];
int dinamica(int nod, int timp) {
if (timp < 0) return -1;
if (nod == 0 && timp == 0) return 0;
if (DP[nod][timp] != -1) return DP[nod][timp];
int &rez = DP[nod][timp];
unsigned i;
rez = dinamica(nod, timp - 1);
for (i = 0; i < G[nod].size(); ++i)
rez >?= dinamica(G[nod][i].first, timp - G[nod][i].second);
if (rez == -1) return rez = -2;
return rez += T[nod][timp];
}
int main() {
FILE *fin = fopen("amenzi.in", "rt");
FILE *fout = fopen("amenzi.out", "wt");
int i, a, b, c;
fscanf(fin, " %d %d %d %d", &N, &M, &K, &P);
for (i = 0; i < M; ++i) {
fscanf(fin, " %d %d %d", &a, &b, &c);
--a; --b;
G[a].PB( MP(b, c) );
G[b].PB( MP(a, c) );
}
for (i = 0; i < K; ++i) {
fscanf(fin, "%d %d %d", &a, &b, &c);
T[a - 1][b] += c;
}
memset(DP, 0xff, sizeof(DP));
for (i = 0; i < P; ++i) {
fscanf(fin, " %d %d", &a, &b);
c = dinamica(a - 1, b);
fprintf(fout, "%d\n", c == -2 ? -1 : c);
}
fclose(fin);
fclose(fout);
return 0;
}