Pagini recente » Cod sursa (job #3198450) | Cod sursa (job #1086371) | Cod sursa (job #938219) | Cod sursa (job #1846506) | Cod sursa (job #1378986)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream is("amenzi.in");
ofstream os("amenzi.out");
int N, M, K, P, x, y ,z;
int D[155][3505];
int Value[155][3505];
vector <pair<int,int> > Graph[155];
int main()
{
is >> N >> M >> K >> P;
for ( int i = 1; i <= M; ++i )
{
is >> x >> y >> z;
Graph[x].push_back(make_pair(y,z));
Graph[y].push_back(make_pair(x,z));
}
for ( int i = 1; i <= K; ++i )
{
is >> x >> y >> z;
Value[x][y] += z;
}
for ( int j = 0; j <= 3500; ++j )
for ( int i = 0; i <= N; ++i )
D[i][j] = -0x3f3f3f3f;
D[1][0] = Value[1][0];
for ( int j = 1; j <= 3500; ++j )
{
for ( int i = 1; i <= N; ++i )
{
D[i][j] = D[i][j-1] + Value[i][j];
for ( const auto& v : Graph[i] )
{
if ( j >= v.second )
D[i][j] = max(D[i][j], D[v.first][j - v.second] + Value[i][j]);
}
}
}
for ( int i = 1; i <= P; ++i )
{
is >> x >> y;
if ( D[x][y] >= 0 )
os << D[x][y] << '\n';
else
os << "-1\n";
}
is.close();
os.close();
}