Cod sursa(job #290192)
#include <cstdlib>
#include <cstdio>
#include <cstring>
int w[3502][151],x[1501],y[1501],cost[1501],am[3502][151],n,m,k,p,i,j,c,max,tt;
int a,b;
int main()
{
freopen("amenzi.in","r",stdin);
freopen("amenzi.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&k,&p);
for (i=0; i<m; ++i)
scanf("%d%d%d",&x[i],&y[i],&cost[i]);
for (i=0;i<k;++i)
{
scanf("%d%d%d",&a,&b,&c);
am[b][a]+=c;
}
max=3500;
w[0][1]=1;
for (tt=0;tt<=max;++tt)
{
for (i=1;i<=n;++i)
{
if (w[tt][i]!=0) w[tt][i]+=am[tt][i];
if (w[tt][i]>w[tt+1][i]) w[tt+1][i]=w[tt][i];
}
for (i=0;i<m;++i)
if (tt+cost[i]<=max)
{
if ((w[tt][x[i]]!=0)&&(w[tt][x[i]]>w[tt+cost[i]][y[i]]))
{
w[tt+cost[i]][y[i]]=w[tt][x[i]];
}
if ((w[tt][y[i]]!=0)&&(w[tt][y[i]]>w[tt+cost[i]][x[i]]))
{
w[tt+cost[i]][x[i]]=w[tt][y[i]];
}
}
}
for (i=0;i<p;++i)
{
scanf("%d %d",&a,&b);
printf("%d\n",w[b][a]-1);
}
/*for (int i=0; i<=50; i++)
{
for (j=1; j<=n; j++)
printf("%6d ",w[i][j]);
printf("\n");
}*/
return 0;
}