Pagini recente » Cod sursa (job #3186021) | Cod sursa (job #2303736) | Cod sursa (job #1405322) | Cod sursa (job #1143365) | Cod sursa (job #80310)
Cod sursa(job #80310)
#include<stdio.h>
#define NMAX 200
#define TMAX 3502
struct lista{long int nod,cst;
lista *urm;} *vf[NMAX];
long int a[TMAX][NMAX],i,j,k,n,P,m,x,y,z;
long int am[TMAX][NMAX];
inline long int MAXX(long int a, long int b)
{
if (a>b) return a;
return b;
}
void DP()
{
for (i=0;i<=3500;i++)
for (j=1;j<=n;j++)
a[i][j]=-1;
lista *p;
a[0][1]=0;
for (i=1;i<=3500;i++)
for (j=1;j<=n;j++)
{
if (a[i-1][j]!=-1) a[i][j]=a[i-1][j]+am[i][j];
for (p=vf[j];p;p=p->urm)
{
if (p->cst>i) continue;
if (a[i-p->cst][p->nod]==-1) continue;
a[i][j]=MAXX(a[i][j],a[i-p->cst][p->nod]+am[i][j]);
}
}
}
int main()
{
freopen("amenzi.in","r",stdin);
freopen("amenzi.out","w",stdout);
scanf("%ld %ld %ld %ld",&n,&m,&k,&P);
lista *p;
for (i=1;i<=m;i++)
{
scanf("%ld %ld %ld",&x,&y,&z);
p=new lista;
p->nod=x;
p->cst=z;
p->urm=vf[y];
vf[y]=p;
p=new lista;
p->nod=y;
p->cst=z;
p->urm=vf[x];
vf[x]=p;
}
for (i=1;i<=k;i++)
{
scanf("%ld %ld %ld",&x,&y,&z);
am[y][x]=z;
}
DP();
for (i=1;i<=P;i++)
{
scanf("%ld %ld",&x,&y);
printf("%ld\n",a[y][x]);
}
return 0;
}