Pagini recente » Cod sursa (job #2240361) | Cod sursa (job #2373408) | Cod sursa (job #2785084) | Cod sursa (job #1182305) | Cod sursa (job #10137)
Cod sursa(job #10137)
#include <stdio.h>
#include <vector>
using namespace std;
#define NMAX 160
#define TMAX 3600
#define INF 1000000000
int N, M, K, P;
int cast[NMAX][TMAX];
int a[TMAX][NMAX];
vector <pair<int, int> > leg[NMAX];
inline int MAX(int a, int b) { return (a > b) ? a : b; }
int main()
{
int i, x, y, T, c;
freopen("amenzi.in", "r", stdin);
freopen("amenzi.out", "w", stdout);
scanf("%d %d %d %d", &N, &M, &K, &P);
for (i = 1; i <= M; i++) {
scanf("%d %d %d", &x, &y, &c);
leg[x].push_back(make_pair(y, c));
leg[y].push_back(make_pair(x, c));
}
for (i = 1; i <= N; i++) leg[i].push_back(make_pair(i, 1));
for (i = 1; i <= K; i++) {
scanf("%d %d %d", &x, &T, &c);
cast[x][T] += c;
}
int j;
for (i = 0; i < TMAX; i++)
for (j = 1; j <= N; j++) a[i][j] = -INF;
a[0][1] = 0;
vector <pair<int, int> > :: iterator it;
for (T = 0; T < TMAX; T++) {
for (i = 1; i <= N; i++) {
for (it = leg[i].begin(); it != leg[i].end(); it++)
if (T + (*it).second < TMAX)
a[T + (*it).second][(*it).first] = MAX(a[T + (*it).second][(*it).first], a[T][i] + cast[(*it).first][T + (*it).second]);
}
}
for (i = 1; i <= P; i++) {
scanf("%d %d", &x, &T);
printf("%d\n", a[T][x]);
}
fclose(stdin);
fclose(stdout);
return 0;
}