Pagini recente » Cod sursa (job #1628473) | Cod sursa (job #395542) | Cod sursa (job #759542) | Cod sursa (job #2660360) | Cod sursa (job #772957)
Cod sursa(job #772957)
#include <cstdio>
#include <vector>
using namespace std;
vector <pair <int,int> > g[151];
int a[151][3501],d[151][3501],qn[8001],qt[8001];
int main()
{
int i,j,k,n,m,p,x,y,z,tmax=0;
vector <pair <int,int> >::iterator it;
freopen("amenzi.in","r",stdin);
freopen("amenzi.out","w",stdout);
scanf("%d %d %d %d\n",&n,&m,&k,&p);
for (i=1;i<=m;++i)
{
scanf("%d %d %d",&x,&y,&z);
g[x].push_back(make_pair(y,z));
g[y].push_back(make_pair(x,z));
}
for (i=1;i<=k;++i)
{
scanf("%d %d %d",&x,&y,&z);
a[x][y]+=z;
}
for (i=1;i<=p;++i)
{
scanf("%d %d",&qn[i],&qt[i]);
if (qt[i]>tmax)
tmax=qt[i];
}
for (i=2;i<=n;++i)
d[i][0]=-2000000000;
for (i=1;i<=tmax;++i)
for (j=1;j<=n;++j)
{
d[j][i]=d[j][i-1]+a[j][i];
for (it=g[j].begin();it!=g[j].end();++it)
if (it->second<=i&&d[it->first][i-it->second]+a[j][i]>d[j][i])
d[j][i]=d[it->first][i-it->second]+a[j][i];
}
for (i=1;i<=p;++i)
if (d[qn[i]][qt[i]]<0)
printf("-1\n");
else
printf("%d\n",d[qn[i]][qt[i]]);
return 0;
}