Pagini recente » Arhiva de probleme | Cod sursa (job #1904940) | Clasament prosoft2017-1112 | Monitorul de evaluare | Cod sursa (job #1567112)
#include <fstream>
#include <vector>
int main()
{
std::ifstream fin("amenzi.in");
std::ofstream fout("amenzi.out");
int n, m, k, p;
fin >> n >> m >> k >> p;
std::vector < std::vector < std::pair < int, int > > > adj_list(n + 1);
for(int i = 1 ; i <= m ; ++i)
{
int u, v, c;
fin >> u >> v >> c;
adj_list[u].push_back(std::make_pair(v, c));
adj_list[v].push_back(std::make_pair(u, c));
}
std::vector < std::vector < int > > amenda(3505, std::vector < int >(n + 1));
for(int i = 1 ; i <= k ; ++i)
{
int l, o, c;
fin >> l >> o >> c;
amenda[o][l] += c;
}
std::vector < std::vector < int > > dp(3505, std::vector < int >(n + 1, -1));
dp[0][1] = 0;
for(int i = 1 ; i <= 3500 ; ++i)
for(int j = 1 ; j <= n ; ++j)
{
for(auto& k : adj_list[j])
if(i - k.second >= 0)
dp[i][j] = std::max(dp[i][j], dp[i - k.second][k.first]);
dp[i][j] = std::max(dp[i][j], dp[i - 1][j]);
if(dp[i][j] >= 0)
dp[i][j] += amenda[i][j];
}
for(int i = 1 ; i <= p ; ++i)
{
int inter, ora;
fin >> inter >> ora;
fout << dp[ora][inter] << "\n";
}
return 0;
}