Pagini recente » Cod sursa (job #1424147) | Cod sursa (job #1336670) | Cod sursa (job #1581449) | Cod sursa (job #2797531) | Cod sursa (job #1134516)
#include<stdio.h>
#include<vector>
using namespace std;
#define nmax 155
#define pmax 8005
#define tmax 3505
struct element{int n, t;};
int n, m, k, p, a, b, t, i, nod, mom, val, tpmax;
vector <element> ma[nmax];
vector <element> ::iterator it;
element vs[pmax], el;
int smax[tmax][nmax], am[tmax][nmax];
void citire()
{
scanf("%ld %ld %ld %ld",&n,&m,&k,&p);
for (i=1;i<=m;i++)
{
scanf("%ld %ld %ld",&a,&b,&t);
el.n=b; el.t=t;
ma[a].push_back(el);
el.n=a;
ma[b].push_back(el);
}
for (i=1;i<=k;i++)
{
scanf("%ld %ld %ld",&nod,&mom,&val);
am[mom][nod]+=val;
}
for (i=1;i<=p;i++)
{
scanf("%ld %ld",&vs[i].n,&vs[i].t);
if (tpmax<vs[i].t)
tpmax=vs[i].t;
}
}
void rezolvare()
{
smax[0][1]=1;
for (t=1;t<=tpmax;t++)
{
for (nod=1;nod<=n;nod++)
{
if (smax[t-1][nod]>0)
smax[t][nod]=smax[t-1][nod];
for (it=ma[nod].begin();it!=ma[nod].end();it++)
if (t>=(*it).t)
if (smax[t-(*it).t][(*it).n]>smax[t][nod])
smax[t][nod]=smax[t-(*it).t][(*it).n];
if (smax[t][nod]>0)
smax[t][nod]+=am[t][nod];
}
}
}
void afisare()
{
for (i=1;i<=p;i++)
printf("%ld\n",smax[vs[i].t][vs[i].n]-1);
}
int main()
{
freopen("amenzi.in","r",stdin);
freopen("amenzi.out","w",stdout);
citire();
rezolvare();
afisare();
return 0;
}