Pagini recente » Cod sursa (job #253751) | Cod sursa (job #2281723) | Cod sursa (job #1886693) | Cod sursa (job #1519884) | Cod sursa (job #16787)
Cod sursa(job #16787)
#include<stdio.h>
#define fin "amenzi.in"
#define fout "amenzi.out"
#define Nmax 151
#define Tmax 3501
int N,M,K,P;
int v[Nmax][Nmax],c[Nmax][Nmax];
int am[Nmax][Tmax],best[Tmax][Nmax];
FILE *in,*out;
inline int maxf(int a,int b) { (a>b)?(a):(a=b); return a; }
int main() {
int i,j,k;
int a,b,cost,best1;
in=fopen(fin,"r"); out=fopen(fout,"w");
fscanf(in,"%i%i%i%i",&N,&M,&K,&P);
for (; M>0; --M) {
fscanf(in,"%i%i%i",&a,&b,&cost);
v[a][++v[a][0]]=b; c[a][v[a][0]]=cost;
v[b][++v[b][0]]=a; c[b][v[b][0]]=cost;
}
for (; K>0; --K) {
fscanf(in,"%i%i%i",&a,&b,&cost);
am[a][b]+=cost;
}
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<=v[i][0];++k)
if (j>=c[i][k])
best1=maxf(best1,best[j-c[i][k]][v[i][k]]);
if (j>0) best1=maxf(best1,best[j-1][i]);
if (best1!=-1) best1+=am[i][j];
best[j][i]=best1;
}
for (; P>0; P--) {
fscanf(in,"%i%i",&a,&b);
fprintf(out,"%i\n",best[b][a]);
}
fclose(in); fclose(out);
return 0;
}