Pagini recente » Cod sursa (job #2508852) | Cod sursa (job #2650113) | Cod sursa (job #399057) | Cod sursa (job #2588370) | Cod sursa (job #517154)
Cod sursa(job #517154)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define file_in "amenzi.in"
#define file_out "amenzi.out"
#define nmax 1555
#define MAXT (1<<12)
int N,M,K,P;
int din[MAXT][nmax];
vector< pair<int,int> > G[MAXT];
int amenda[MAXT][nmax];
int main(){
int a,b,c;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d %d %d", &N, &M, &K, &P);
for (int i=1;i<=M;++i){
scanf("%d %d %d", &a, &b, &c);
a--;b--;
G[a].push_back(make_pair(b,c));
G[b].push_back(make_pair(a,c));
}
for (int i=1;i<=K;++i){
scanf("%d %d %d", &a, &b, &c);
a--;
amenda[b][a]+=c;
}
din[0][0]=1;
vector< pair<int,int> > :: iterator it;
for (int i=0;i<MAXT;++i)
for (int j=0;j<N;++j)
if (din[i][j]){
din[i][j]+=amenda[i][j];
din[i+1][j]=max(din[i][j],din[i+1][j]);
for (it=G[j].begin();it!=G[j].end();++it)
if (i+(it->second)<MAXT)
din[i+(it->second)][(it->first)]=max(din[i+(it->second)][(it->first)],din[i][j]);
}
for (int i=1;i<=P;++i){
scanf("%d %d", &a, &b);
a--;b--;
printf("%d\n", din[b][a]-1);
}
return 0;
}