Pagini recente » Cod sursa (job #3247319) | Cod sursa (job #280899) | Cod sursa (job #660296) | Cod sursa (job #2475339) | Cod sursa (job #16778)
Cod sursa(job #16778)
#include<stdio.h>
#define fin "amenzi.in"
#define fout "amenzi.out"
#define Nmax 151
#define Mmax 1501
#define Tmax 3201
int n,m,k,p,v[Nmax][Nmax],best[Tmax][Nmax],cost[Tmax][Nmax];
FILE *in,*out;
inline int maxf(int a,int b) { (a>b)?(a):(a=b); return a; }
int main() {
int i,j,a,b,c,best1;
in=fopen(fin,"r"); out=fopen(fout,"w");
fscanf(in,"%i%i%i%i",&n,&m,&k,&p);
for (i=1;i<=m;++i) {
fscanf(in,"%i%i%i",&a,&b,&c);
v[a][b]=v[b][a]=c;
}
for (i=1;i<=k;++i) {
fscanf(in,"%i%i%i",&a,&b,&c);
cost[a][b]+=c;
}
for (j=0;j<Tmax;++j)
for (i=1;i<=n;++i) best[j][i]=-1;
for (j=0;j<Tmax;++j)
for (i=1;i<=n;++i) {
best1=-1;
if (i==1) best1=0;
for (k=1;k<=n;++k)
if (j>=v[i][k] && v[i][k]) best1=maxf(best1,best[j-v[i][k]][k]);
if (j>0) best1=maxf(best1,best[j-1][i]);
if (best1!=-1) best[j][i]=best1+cost[i][j];
}
for (i=1;i<=p;++i) {
fscanf(in,"%i%i",&a,&b);
fprintf(out,"%i\n",best[b][a]);
}
/*
for (i=1;i<=n;++i) {
for (j=0;j<=20;++j)
printf("%i ",best[j][i]);
printf("\n");
}
*/
fclose(in); fclose(out);
return 0;
}