Pagini recente » Cod sursa (job #2047762) | Cod sursa (job #79863) | Cod sursa (job #749570) | Cod sursa (job #1327154) | Cod sursa (job #29036)
Cod sursa(job #29036)
#include <stdio.h>
#define MaxT 3501
#define MaxN 151
int N, M, K, P;
long long A[MaxN][MaxT];
long long nrA[MaxN][MaxT];
int e[2000][3], nrM;
int main()
{
int a, b, i, j, k;
long long c;
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 %lld", &a, &b, &c);
e[i][0] = a, e[i][1] = b; e[i][2] = c;
}
for (i = 1; i <= K; i++)
{
fscanf(fin, "%d %d %lld", &a, &b, &c);
nrA[a][b] += c;
}
int t;
for (t = 0; t < MaxT; t++)
for (i = 1; i <= N; i++)
A[i][t] = -1;
A[1][0] = 0;
for (t = 1; t < MaxT; t++)
for (k = 1; k <= M; k++)
{
i = e[k][0], j = e[k][1], c = e[k][2];
if (i != j)
{
int ok = 1;
if (t - c < 0) ok = 0;
if (A[j][t-c] == -1) ok = 0;
if (ok)
{
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[i][t-1] + nrA[i][t])
A[i][t] = A[i][t-1] + nrA[i][t];
}
}
j = e[k][0], i = e[k][1]; c = e[k][2];
if (i != j)
{
int ok = 1;
if (t - c < 0) ok = 0;
if (A[j][t-c] == -1) ok = 0;
if (ok)
{
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[i][t-1] + nrA[i][t])
A[i][t] = A[i][t-1] + nrA[i][t];
}
}
}
for (i = 1; i <= P; i++)
{
fscanf(fin, "%d %d", &a, &b);
fprintf(fout, "%lld\n", A[a][b]);
}
fclose(fin);
fclose(fout);
return 0;
}