Pagini recente » Cod sursa (job #1592152) | Cod sursa (job #17669) | Cod sursa (job #1958925) | Cod sursa (job #2776188) | Cod sursa (job #779701)
Cod sursa(job #779701)
#include <fstream>
#include <vector>
#define NMAX 155
#define TMAX 3505
#define INF 0x3f3f3f3f
using namespace std;
vector< pair < int, int > > v[NMAX], meet;
int dp[NMAX][TMAX], amenda[NMAX][TMAX], n, m, k, p;
void citire()
{
ifstream in("amenzi.in");
in>>n>>m>>k>>p; int a, b, c;
for(int i = 1; i <= m; i++)
{
in>>a>>b>>c;
v[a].push_back(make_pair(b, c));
v[b].push_back(make_pair(a, c));
}
for(int i = 1; i <= k; i++)
{
in>>a>>b>>c;
amenda[a][b] += c;
}
for(int i = 1; i <= p; i++)
{
in>>a>>b;
meet.push_back(make_pair(a, b));
}in.close();
}
void init()
{
for(int i = 1; i <= n; i++)
for(int j = 0; j < TMAX; j++)
dp[i][j] = -INF;
dp[1][0] = amenda[1][0];
}
void afisare()
{
ofstream out("amenzi.out");
for(int i = 0; i < meet.size(); i++)
out<<dp[meet[i].first][meet[i].second]<<"\n";
out.close();
}
int main()
{
citire();
init();
for(int j = 1; j < TMAX; j++)
for(int i = 1; i <= n; i++)
{
dp[i][j] = dp[i][j - 1];
for(int h = 0; h < v[i].size(); h++)
dp[i][j] = max(dp[i][j], (v[i][h].second <= j ? dp[v[i][h].first][j - v[i][h].second] : -INF));
dp[i][j] += amenda[i][j];
}
afisare();
return 0;
}