Pagini recente » Cod sursa (job #1224426) | Cod sursa (job #1915296) | Cod sursa (job #2108824) | Cod sursa (job #2399) | Cod sursa (job #10586)
Cod sursa(job #10586)
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
#define max(a, b) ((a > b) ? a : b)
#define NMax 155
using namespace std;
int N, K, ND, T, C;
vector< pair<int, int> > G[NMax];
int A[3505][1505], D[3505][155];
int main(void)
{
int i, j, c, M, P;
vector< pair<int, int> >::iterator f;
freopen("amenzi.in", "r", stdin);
scanf("%d %d %d %d", &N, &M, &K, &P);
for (; M; M--)
{
scanf("%d %d %d", &i, &j, &c);
G[i].push_back(make_pair(j, c));
G[j].push_back(make_pair(i, c));
}
for (i = 0; i < K; i++)
{
scanf("%d %d %d", &ND, &T, &C);
A[T][ND] += C;
}
memset(D, -1, sizeof(D));
D[0][1] = 0;
for (j = 1; j <= 3500; j++)
for (i = 1; i <= N; i++)
{
D[j][i] = D[j-1][i]; // asteptam in i
for (f = G[i].begin(); f != G[i].end(); f++)
if (j >= f->second)
D[j][i] = max(D[j][i], D[j-f->second][f->first]);
if (D[j][i] != -1)
D[j][i] += A[j][i]; // incasam amenzile in nodul i, timpul j
}
for (; P; P--)
{
scanf("%d %d", &ND, &T);
printf("%d\n", D[T][ND]);
}
for (;;);
return 0;
}