Pagini recente » Cod sursa (job #1459468) | Cod sursa (job #380681) | Cod sursa (job #1621194) | Cod sursa (job #2491581) | Cod sursa (job #609685)
Cod sursa(job #609685)
#include <cstdio>
#include <vector>
#include <utility>
using namespace std;
#define MAXN 155
#define MAXT 3505
int main(){
freopen("amenzi.in", "r", stdin);
freopen("amenzi.out", "w", stdout);
int N, M, K, P, i, j, a, b, c, maxa;
vector< pair<int,int> > G[MAXN];
vector< pair<int,int> >::iterator ii;
static int A[MAXN][MAXT], OK[MAXN][MAXT];
scanf("%d%d%d%d", &N, &M, &K, &P);
for(i=1; i<=M; i++){
scanf("%d%d%d", &a, &b, &c);
G[a].push_back(make_pair(b,c));
G[b].push_back(make_pair(a,c));
}
for(i=1; i<=K; i++){
scanf("%d%d%d", &a, &b, &c);
A[a][b]+=c;
}
OK[1][0]=1;
for(i=1; i<MAXT; i++){
for(j=1; j<=N; j++){
if(OK[j][i-1]){
maxa=A[j][i-1];
OK[j][i]=1;
}
else
maxa=0;
for(ii=G[j].begin(); ii!=G[j].end(); ii++)
if(i-ii->second>=0 && A[ii->first][i-ii->second]>=maxa && OK[ii->first][i-ii->second]){
maxa=A[ii->first][i-ii->second];
OK[j][i]=1;
}
A[j][i]+=maxa;
}
}
for(i=1; i<=P; i++){
scanf("%d%d", &a, &b);
printf("%d\n", A[a][b]);
}
return 0;
}