Cod sursa(job #2558816)

Utilizator Anastasia11Susciuc Anastasia Anastasia11 Data 26 februarie 2020 20:18:55
Problema Amenzi Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#define Nmax 155

using namespace std;

ifstream f("amenzi.in");
ofstream g("amenzi.out");

int n, m, p, k;
int amenda[Nmax][3505];
vector <pair <int, int> > v[Nmax];
int a[Nmax][3505]; // suma maxima care se poate obt la momentul i ajungand in nodul j

int main()
{
    f >> n >> m >> k >> p;
    for (int i = 1, x, y, c; i <= m; i++)
    {
        f >> x >> y >> c;
        v[x].push_back({y, c});
        v[y].push_back({x, c});
    }

    for (int i = 1, a, b, c; i <= k; i++)
    {
        f >> a >> b >> c;
        amenda[a][b]+=c;
    }
    memset(a, -1, sizeof(a));
    a[1][0]=0;
    for (int j = 1; j <= 3500; j++)
        for (int i = 1; i <= n; i++)
        {
            a[i][j]=a[i][j-1]; // am ramas in nodul i si secunda urmatoare
            for (auto k:v[i])
            {
                int y=k.first;
                int c=k.second;
                if (j-c >= 0)
                    a[i][j]=max(a[i][j], a[y][j-c]);
            }
            if(a[i][j]!=-1) a[i][j]+=amenda[i][j];

        }
    for (int i = 1, x, y; i <= p; i++)
	{
	    f >> x >> y;
		g << a[x][y] << '\n';
	}


    return 0;
}