Pagini recente » Cod sursa (job #2794199) | Cod sursa (job #2815627) | Cod sursa (job #2778241) | Cod sursa (job #2207379) | Cod sursa (job #2558816)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#define Nmax 155
using namespace std;
ifstream f("amenzi.in");
ofstream g("amenzi.out");
int n, m, p, k;
int amenda[Nmax][3505];
vector <pair <int, int> > v[Nmax];
int a[Nmax][3505]; // suma maxima care se poate obt la momentul i ajungand in nodul j
int main()
{
f >> n >> m >> k >> p;
for (int i = 1, x, y, c; i <= m; i++)
{
f >> x >> y >> c;
v[x].push_back({y, c});
v[y].push_back({x, c});
}
for (int i = 1, a, b, c; i <= k; i++)
{
f >> a >> b >> c;
amenda[a][b]+=c;
}
memset(a, -1, sizeof(a));
a[1][0]=0;
for (int j = 1; j <= 3500; j++)
for (int i = 1; i <= n; i++)
{
a[i][j]=a[i][j-1]; // am ramas in nodul i si secunda urmatoare
for (auto k:v[i])
{
int y=k.first;
int c=k.second;
if (j-c >= 0)
a[i][j]=max(a[i][j], a[y][j-c]);
}
if(a[i][j]!=-1) a[i][j]+=amenda[i][j];
}
for (int i = 1, x, y; i <= p; i++)
{
f >> x >> y;
g << a[x][y] << '\n';
}
return 0;
}