Pagini recente » Cod sursa (job #2371761) | Cod sursa (job #884721) | Cod sursa (job #2640002) | Cod sursa (job #578164) | Cod sursa (job #208493)
Cod sursa(job #208493)
#include<stdio.h>
#include<vector>
using namespace std;
#define x first
#define y second
int n, m, k, p, i, j, i1, x, y, cs, cst[3505][155], d[3505][155];
vector< pair<int, int> > v[155];
int main()
{
freopen("amenzi.in", "rt", stdin);
freopen("amenzi.out", "wt", stdout);
scanf("%d%d%d%d", &n, &m, &k, &p);
for (i = 1; i <= m; i ++){
scanf("%d%d%d", &x, &y, &cs);
v[x].push_back(make_pair(y, cs)), v[y].push_back(make_pair(x, cs));
}
for (i = 1; i <= k; i ++){
scanf("%d%d%d", &x, &y, &cs);
cst[y][x] += cs;
}
memset(d, 0xff, sizeof(d));
d[0][1] = 0;
for (i = 0; i <= 3500; i ++)
for (j = 1; j <= n; j ++)
if (d[i][j] != -1){
d[i][j] += cst[i][j];
d[i+1][j] = max(d[i+1][j], d[i][j]);
for (i1 = 0; i1 < (int)v[j].size(); i1 ++)
if (i + v[j][i1].y <= 3500)
d[i + v[j][i1].y][v[j][i1].x] = max(d[i + v[j][i1].y][v[j][i1].x], d[i][j]);
}
for (i = 1; i <= p; i ++){
scanf("%d%d", &x, &y);
printf("%d\n", d[y][x]);
}
return 0;
}