Pagini recente » Cod sursa (job #562027) | Cod sursa (job #2954521) | Cod sursa (job #300953) | Cod sursa (job #3241827) | Cod sursa (job #196908)
Cod sursa(job #196908)
#include<stdio.h>
#define N 3605
#define MAX 155
int n,m,k,p;
int v[N][N],c[N][N];
int s[N][MAX],best[MAX][N];
inline int max(int a,int b){
(a>b)?(a):(a=b);
return a;
}
int main() {
int i,j,k,a,b,exp,best1;
freopen("amenzi.in","r",stdin);
freopen("amenzi.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&k,&p);
for(;m>0;--m){
scanf("%d%d%d",&a,&b,&exp);
v[a][++v[a][0]]=b;
c[a][v[a][0]]=exp;
v[b][++v[b][0]]=a;
c[b][v[b][0]]=exp;
}
for(;k>0;--k){
scanf("%d%d%d",&a,&b,&exp);
s[a][b]+=exp;
}
for(j=0;j<MAX;++j)
for (i=1;i<=n;++i)
best[j][i]=-1;
for(j=0;j<MAX;++j)
for (i=1;i<=n;++i){
best1=-1;
if (i==1)
best1=0;
for (k=1;k<=v[i][0];++k)
if (j>=c[i][k])
best1=max(best1,best[j-c[i][k]][v[i][k]]);
if (j>0)
best1=max(best1,best[j-1][i]);
if (best1!=-1)
best1+=s[i][j];
best[j][i]=best1;
}
for(;p>0;--p){
scanf("%d%d",&a,&b);
printf("%d\n",best[b][a]);
}
fclose(stdin);
fclose(stdout);
return 0;
}