Cod sursa(job #2407295)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 16 aprilie 2019 19:14:03
Problema Amenzi Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.52 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("amenzi.in");
ofstream g("amenzi.out");
int n, m, k, p;
int xtr[152][10000], mx[152][10000];
vector<pair<int, int> >v[152];
bool viz[152][10000];
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 <= 3500; ++i)
    {
        if(i)
            for(int j = 1; j <= n; ++j)
            {
                viz[j][i] |= viz[j][i-1];
                if(mx[j][i-1] > mx[j][i])
                    mx[j][i] = mx[j][i-1];
            }
        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;
                viz[vec][i+timp] = 1;
                if(mx[j][i] > mx[vec][i+timp])
                    mx[vec][i+timp] = mx[j][i];
            }
        }
    }
    for(int i = 1; i <= p; ++i)
    {
        int maax = -1;
        int a, b, c;
        f >> a >> b;
        if(viz[a][b])
            maax = mx[a][b];
        g << maax << '\n';
    }
    return 0;
}