Cod sursa(job #2407270)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 16 aprilie 2019 18:53:04
Problema Amenzi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.78 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("amenzi.in");
ofstream g("amenzi.out");
int n, m, k, p;
int xtr[152][4002], mx[152][4002];
vector<pair<int, int> >v[152];
bool viz[152][4002];
int main()
{
    f >> n >> m >> k >> p;
    for(int i = 1; i <= m; ++i)
    {
        int a, b, c;
        f >> a >> b >> c;
        v[a].push_back({b, c});
        v[b].push_back({a, c});
    }
    for(int i = 1; i <= k; ++i)
    {
        int a, b, c;
        f >> a >> b >> c;
        xtr[a][b] += c;
    }
    viz[1][0] = 1;
    for(int i = 0; i <= 3600; ++i)
    {
        if(i)
            for(int j = 1; j <= n; ++j)
            {
                viz[j][i] = max(viz[j][i], viz[j][i-1]);
                mx[j][i] = max(mx[j][i-1], mx[j][i]);
            }
        for(int j = 1; j <= n; ++j)
            if(viz[j][i])
                mx[j][i] += xtr[j][i];
        for(int j = 1; j <= n; ++j)
        {
            if(!viz[j][i])
                continue;
            for(int q = 0; q < v[j].size(); ++q)
            {
                int vec = v[j][q].first;
                int timp = v[j][q].second;
                if(i+timp > 3600)
                    continue;
                viz[vec][i+timp] = 1;
                mx[vec][i+timp] = max(mx[vec][i+timp], mx[j][i]);
            }
        }
    }
    for(int i = 1; i <= p; ++i)
    {
        int maax = -1;
        int a, b, c;
        f >> a >> b;
        for(int j = 0; j < v[a].size(); ++j)
        {
            int vec = v[a][j].first;
            int timp = v[a][j].second;
            if(b < timp)
                continue;
            if(!viz[vec][b-timp])
                continue;
            maax=max(maax,mx[vec][b-timp]);
        }
        g << maax << '\n';
    }
    return 0;
}