Pagini recente » Cod sursa (job #865754) | Cod sursa (job #2026726) | Cod sursa (job #1299980) | Cod sursa (job #1491768) | Cod sursa (job #369620)
Cod sursa(job #369620)
#include <algorithm>
#include <vector>
using namespace std;
#define pb push_back
#define mp make_pair
#define MAX 3505
#define DIM 155
vector <pair <int,int> > lst[DIM];
int best[DIM][MAX],crime[DIM][MAX];
int n,m,k,p;
void read ()
{
int i,x,y,z;
scanf ("%d%d%d%d",&n,&m,&k,&p);
for (i=1; i<=m; ++i)
{
scanf ("%d%d%d",&x,&y,&z);
lst[x].pb (mp (y,z));
lst[y].pb (mp (x,z));
}
for (i=1; i<=k; ++i)
{
scanf ("%d%d%d",&x,&y,&z);
crime[x][y]+=z;
}
}
void solve ()
{
vector <pair <int,int> > :: iterator it;
int i,j;
memset (best,-1,sizeof (best));
best[1][0]=crime[1][0];
for (i=1; i<MAX; ++i)
for (j=1; j<=n; ++j)
{
best[j][i]=best[j][i-1];
for (it=lst[j].begin (); it!=lst[j].end (); ++it)
if (it->second<=i)
best[j][i]=max (best[j][i],best[it->first][i-it->second]);
if (crime[j][i] && best[j][i]!=-1)
best[j][i]+=crime[j][i];
}
}
void print ()
{
int i,x,y;
for (i=1; i<=p; ++i)
{
scanf ("%d%d",&x,&y);
if (best[x][y]!=-1)
printf ("%d\n",best[x][y]);
else
printf ("0\n");
}
}
int main ()
{
freopen ("amenzi.in","r",stdin);
freopen ("amenzi.out","w",stdout);
read ();
solve ();
print ();
return 0;
}