Pagini recente » Cod sursa (job #21599) | Cod sursa (job #687189) | Cod sursa (job #2310240) | Cod sursa (job #1803041) | Cod sursa (job #1463686)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
const int DimT = 3505, DimN = 155;
vector<vector<pair<int, int>>> G;
int d[DimN][DimT], a[DimN][DimT];
int n,m,k,p;
void Read();
void Solve();
void Write();
int main()
{
Read();
Solve();
Write();
}
void Read()
{
fin >> n >> m >> k >> p;
G = vector<vector<pair<int, int>>>(n + 1, vector<pair<int, int>>());
int x, y, c;
for (int i = 1; i <= m; i++)
{
fin >> x >> y >> c;
G[x].push_back(make_pair(y,c));
G[y].push_back(make_pair(x,c));
}
for( int i = 1; i <= k; i++)
{
fin >> x >> y >> c;
a[x][y] += c;
}
}
void Solve()
{
for (int i = 0; i < DimN; i++)
for (int j = 0; j < DimT; j++)
d[i][j]=-1;
d[1][0]=0;
for (int i = 0; i < DimT; i++)
for (int j = 1; j <= n; j++)
{
if( i > 0 )
d[j][i] = d[j][i-1];
for ( auto x : G[j] )
if ( i >= x.second )
d[j][i]= max(d[j][i], d[x.first][i-x.second]);
if ( d[j][i] != -1)
d[j][i] += a[j][i];
}
}
void Write()
{
int x, y;
for(int i = 1; i <= p; i++)
{
fin >> x >> y;
fout << d[x][y] << "\n";
}
}