Cod sursa(job #1496330)

Utilizator cojocarugabiReality cojocarugabi Data 4 octombrie 2015 19:20:09
Problema Amenzi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 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[155][3505];
int dp[155][3505];
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});
    }
    memset(dp,-1,sizeof(dp));
    dp[1][0] = v[1][0];
    while (k --)
    {
        int a,b,c;
        fi>>a>>b>>c;
        v[a][b] += c;
    }
    for (int k = 1;k <= 3500;++k)
    {
        for (int i = 1;i <= n;++i)
            {
                dp[i][k] = dp[i][k-1];
                for (auto it : s[i])
                    if (k >= it.y)
                        dp[i][k] = max(dp[i][k],dp[it.x][k-it.y]);
                if (dp[i][k] != -1) dp[i][k] += v[i][k];
            }
    }
    while (p --)
    {
        int a,b;
        fi>>a>>b;
        fo << dp[a][b] << '\n';
    }
    return 0;
}