Pagini recente » Cod sursa (job #2806693) | Cod sursa (job #1089917) | Cod sursa (job #2733000) | Cod sursa (job #230118) | Cod sursa (job #764301)
Cod sursa(job #764301)
#include <fstream>
#include <vector>
#include <cstring>
#define MAX_T 3501
#define MAX_N 151
#define pb push_back
using namespace std;
ifstream in("amenzi.in");
ofstream out("amenzi.out");
int N, M, K, P, best[MAX_T][MAX_N], amenda[MAX_T][MAX_N];
vector< pair< int, int > >G[MAX_N];
int main()
{
int i, j, x, y, t, fiu;
in >> N >> M >> K >> P;
for (i = 1; i <= M; i++)
{
in >> x >> y >> t;
G[x].pb(make_pair(y,t));
G[y].pb(make_pair(x,t));
}
for (i = 1; i <= K; i++)
{
in >> x >> y >> t;
amenda[y][x] += t;
}
memset(best, 0xff, sizeof(best));
best[0][1] = 0;
for (i = 1; i <= 3500; i++)
{
for (j = 1; j <= N; j++)
{
best[i][j] = max(best[i][j], best[i-1][j]);
vector< pair< int, int > > ::iterator it;
for (it = G[j].begin(); it != G[j].end(); ++it)
{
t = it -> second;
fiu = it -> first;
if ( i >= t && best[i-t][fiu] > best[i][j])
{
best[i][j] = best[i-t][fiu];
}
}
if (best[i][j] != -1)
{
best[i][j] += amenda[i][j];
}
}
}
for (i = 1; i <= P; i++)
{
in >> x >> t;
out << best[t][x] << '\n';
}
return 0;
}