Pagini recente » Cod sursa (job #2042526) | Cod sursa (job #2704006) | Cod sursa (job #2301555) | Cod sursa (job #2048036) | Cod sursa (job #1072093)
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
const int MAX_N = 152;
const int MAX_T = 3502;
const int INF = 0x3f3f3f3f;
int N, M, K, P;
int C[MAX_N][MAX_N], D[MAX_T][MAX_N], fines[MAX_T][MAX_N];
vector < int > v[MAX_N];
int main() {
ifstream f("amenzi.in");
ofstream g("amenzi.out");
f >> N >> M >> K >> P;
for(int i = 1, x, y; i <= M; ++i) {
f >> x >> y;
f >> C[x][y];
C[y][x] = C[x][y];
v[x].push_back(y), v[y].push_back(x);
}
for(int i = 1, x, t, val; i <= K; ++i) {
f >> x >> t >> val;
fines[t][x] += val;
}
for(int t = 0; t < MAX_T; ++t)
for(int i = 1; i <= N; ++i)
D[t][i] = -INF;
D[0][1] = 0;
for(int t = 1; t < MAX_T; ++t)
for(int i = 1; i <= N; ++i) {
for(size_t j = 0; j < v[i].size(); ++j) {
int x = v[i][j], t1;
t1 = t - C[i][x];
if(t1 < 0)
continue;
D[t][i] = max(D[t][i], D[t1][x]);
}
D[t][i] = max(D[t][i], D[t - 1][i]);
if(D[t][i] != -INF)
D[t][i] += fines[t][i];
}
for(int i = 1, x, t; i <= P; ++i) {
f >> x >> t;
if(D[t][x] != -INF)
g << D[t][x] << "\n";
else g << 0 << "\n";
}
f.close();
g.close();
return 0;
}