Cod sursa(job #28980)

Utilizator varuvasiTofan Vasile varuvasi Data 8 martie 2007 15:02:41
Problema Amenzi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#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 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);
         fprintf(fout, "%d\n", A[a][b]);
     }
     fclose(fin);
     fclose(fout);
     
     return 0;
}