Pagini recente » Cod sursa (job #2468503) | Cod sursa (job #2741584) | Cod sursa (job #2920462) | Cod sursa (job #1464697) | Cod sursa (job #28984)
Cod sursa(job #28984)
#include <stdio.h>
#define MaxT 3501
#define MaxN 151
int N, M, K, P;
int A[MaxN][MaxT], p[MaxN][MaxT], nrA[MaxN][MaxT];
int C[MaxN][MaxT];
int e[100001];
int main()
{
int a, b, c, i, j;
FILE *fin = fopen("amenzi.in", "rt");
FILE *fout = fopen("amenzi.out", "wt");
fscanf(fin, "%d %d %d %d", &N, &M, &K, &P);
for (i = 1; i <= M; i++)
{
fscanf(fin, "%d %d %d", &a, &b, &c);
C[a][b] = C[b][a] = c;
}
for (i = 1; i <= K; i++)
{
fscanf(fin, "%d %d %d", &a, &b, &c);
nrA[a][b] += c;
}
p[1][0] = 1;
int t;
for (t = 1; t < MaxT; t++)
for (i = 1; i <= N; i++)
for (j = 1; j <= N; j++)
if (i != j && C[j][i])
{
c = C[j][i];
if (t - c < 0) continue;
if (!p[j][t-c]) continue;
if (A[i][t] < A[j][t-c] + nrA[i][t])
A[i][t] = A[j][t-c] + nrA[i][t];
if (A[i][t] < A[j][t-1] + nrA[i][t])
A[i][t] = A[j][t-1] + nrA[i][t];
p[i][t] = 1;
}
for (i = 1; i <= P; i++)
{
fscanf(fin, "%d %d", &a, &b);
if (!p[a][b]) fprintf(fout, "-1\n");
else fprintf(fout, "%d\n", A[a][b]);
}
fclose(fin);
fclose(fout);
return 0;
}