Cod sursa(job #1656438)

Utilizator llalexandruLungu Alexandru Ioan llalexandru Data 19 martie 2016 12:49:59
Problema Amenzi Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <fstream>
#define T 3505

using namespace std;

ifstream fin("amenzi.in");
ofstream fout("amenzi.out");

struct lista{int val, cost;};

lista A[155][155];
int n, m, f, caz;
int Amenda[T][155], Mat[T][155];

void Citire();
void PD();
void Afisare();

int main()
{
    int i, j;
    Citire();
    PD();
    Afisare();
    return 0;
}

void Citire()
{
    int i, x, y, c;
    fin>>n>>m>>f>>caz;
    for (i=1; i<=m; i++)
    {
        fin>>x>>y>>c;
        A[x][0].val++;
        A[x][A[x][0].val].val = y;
        A[x][A[x][0].val].cost = c;
        A[y][0].val++;
        A[y][A[y][0].val].val = x;
        A[y][A[y][0].val].cost = c;
    }
    for (i=1; i<=f; i++)
    {
        fin>>x>>y>>c;
        Amenda[x][y]=c;
    }
}

void PD()
{
    int i, j, k, p, cc, maxim;
    // init 0 si -1
    for (i=1; i<=n; i++)
        Mat[0][i]=-1;
    Mat[0][1]=0;
    for (i=1; i<T; i++)
    {
        for (j=1; j<=n; j++)
        {
            maxim=-1;
            for (k=1; k<=A[j][0].val; k++)
            {
                p=A[j][k].val;
                cc=A[j][k].cost;
                if (i>=cc)
                    if (Mat[i-cc][p]>maxim)
                        maxim=Mat[i-cc][p];
            }
            Mat[i][j]=max(maxim, Mat[i-1][j]);
            if (Mat[i][j]>=0)
                Mat[i][j]+=Amenda[j][i];
        }
    }
}

void Afisare()
{
    int i, x, y;
    for (i=1; i<=caz; i++)
    {
        fin>>x>>y;
        fout<<Mat[y][x]<<'\n';
    }
}