Pagini recente » Cod sursa (job #2369552) | Cod sursa (job #2793666) | Cod sursa (job #1715423) | Cod sursa (job #1574022) | Cod sursa (job #1420037)
#include <iostream>
#include <vector>
#include <stdio.h>
#define TMax 3501
#define NMax 155
using namespace std;
vector< pair<int,int> > Graf[NMax];
int D[NMax][TMax],A[NMax][TMax];
int N,M,K,P,x,y,c;
void Read()
{
freopen("amenzi.in","r",stdin);
scanf("%d%d%d%d",&N,&M,&K,&P);
for(int i=1;i<=M;i++)
{
scanf("%d%d%d",&x,&y,&c);
Graf[x].push_back(make_pair(y,c));
Graf[y].push_back(make_pair(x,c));
}
for(int i=1;i<=K;i++)
{
scanf("%d%d%d",&x,&y,&c);
A[x][y]+=c;
}
}
void Initialization()
{
for(int i=1;i<=NMax;i++)
for(int j=0;j<=TMax;j++)
D[i][j]=-1;
D[1][0]=0;
}
void Solve()
{
for(int i=0;i<TMax;i++)
for(int j=1;j<=N;j++)
{
if(i>0)
D[j][i]=D[j][i-1];
for(vector< pair<int,int> >::iterator it=Graf[j].begin();it!=Graf[j].end();it++)
if(i>=it->second)
D[j][i]=max(D[j][i],D[it->first][i-it->second]);
if(D[j][i]!=-1)
D[j][i]+=A[j][i];
}
}
void Write()
{
freopen("amenzi.out","w",stdout);
for(int i=1;i<=P;i++)
{
scanf("%d%d",&x,&y);
printf("%d\n",D[x][y]);
}
}
int main()
{
Read();
Initialization();
Solve();
Write();
}