Cod sursa(job #1496334)

Utilizator cojocarugabiReality cojocarugabi Data 4 octombrie 2015 19:25:43
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
# include <bits/stdc++.h>
# define x first
# define y second
using namespace std;
ifstream fi("amenzi.in");
ofstream fo("amenzi.out");
vector < pair < int , int > > s[222];
int v[3505][155];
int dp[3505][155];
int main(void)
{
    int n,m,p,k;
    fi>>n>>m>>k>>p;
    while (m --)
    {
        int a,b,c;
        fi>>a>>b>>c;
        s[a].push_back({b,c});
        s[b].push_back({a,c});
    }
    for (int i = 0;i <= 3500;++i)
        for (int j = 1;j <= n;++j)
            dp[i][j] = -1;
    while (k --)
    {
        int a,b,c;
        fi>>a>>b>>c;
        v[b][a] += c;
    }
    dp[0][1] = v[0][1];
    for (int k = 1;k <= 3500;++k)
    {
        for (int i = 1;i <= n;++i)
            {
                dp[k][i] = dp[k-1][i];
                for (auto it : s[i])
                    if (k >= it.y)
                        dp[k][i] = max(dp[k][i],dp[k-it.y][it.x]);
                if (dp[k][i] != -1) dp[k][i] += v[k][i];
            }
    }
    while (p --)
    {
        int a,b;
        fi>>a>>b;
        fo << dp[b][a] << '\n';
    }
    return 0;
}