Pagini recente » Cod sursa (job #859929) | Cod sursa (job #1163755) | Cod sursa (job #1812936) | Cod sursa (job #2563438) | Cod sursa (job #9426)
Cod sursa(job #9426)
#include <cstdio>
#define FIN "amenzi.in"
#define FOUT "amenzi.out"
#define MAXN 161
#define MAXM 1601
#define MAXP 8101
#define MAXK 12101
#define MAXT 3601
#define INF 100000
long c[MAXN][MAXN], am[MAXT][MAXN], meet[MAXP][2];
long long s[MAXT][MAXN], max;
long n, m, i, j, k, p, x, y, cost, tmaxim;
int main() {
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%ld %ld %ld %ld", &n, &m, &k, &p);
tmaxim = 0;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
c[i][j] = (i==j) ? (1) : (INF);
for (i=1; i<=m; i++) {
scanf("%ld %ld %ld", &x, &y, &cost);
c[x][y] = cost;
c[y][x] = cost;
}
for (i=1; i<=k; i++) {
scanf("%ld %ld %ld", &x, &y, &cost);
am[y][x] = cost;
if (tmaxim<cost) tmaxim = y;
}
for (i=1; i<=p; i++) {
scanf("%ld %ld", &meet[i][0], &meet[i][1]);
if (tmaxim<meet[i][1]) tmaxim = meet[i][1];
}
//solve
s[0][1] = 1;
for (i=1; i<=tmaxim; i++) {
for (j=1; j<=n; j++) {
max = 0;
for (k=1; k<=n; k++) {
if (i>=c[k][j])
if (s[i-c[k][j]][k] > max) max = s[i-c[k][j]][k];
}
if (max) s[i][j] = max + am[i][j];
}
}
//afis
for (i=1; i<=p; i++)
printf("%lld\n", s[meet[i][1]][meet[i][0]] - 1);
return 0;
}