Pagini recente » Cod sursa (job #891634) | Cod sursa (job #505778) | Cod sursa (job #3171111) | Cod sursa (job #1634458) | Cod sursa (job #1378893)
#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[151][3501];
int Value[151][3501];
vector <pair<int,int> > Graph[151];
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 i = 1; i <= N; ++i )
D[i][0] = -1;
if ( Value[1][0] != 0 )
D[1][0] = Value[1][0];
else
D[1][0] = 0;
for ( int j = 1; j <= 3500; ++j )
{
for ( int i = 1; i <= N; ++i )
{
D[i][j] = D[i][j-1];
for ( const auto& v : Graph[i] )
{
if ( j - v.second >= 0 )
D[i][j] = max(D[i][j], D[v.first][j - v.second] );
}
if ( D[i][j] != -1 )
D[i][j] += Value[i][j];
}
}
for ( int i = 1; i <= P; ++i )
{
is >> x >> y;
os << D[x][y] << '\n';
}
is.close();
os.close();
}