Pagini recente » Cod sursa (job #423998) | Cod sursa (job #3264291) | Cod sursa (job #537) | Cod sursa (job #269363) | Cod sursa (job #10878)
Cod sursa(job #10878)
# include <stdio.h>
# define input "amenzi.in"
# define output "amenzi.out"
# define maxN 151
# define maxtimp 7503
# define max 801
long n,m,k,p,cost;
long x,y,c,C[maxtimp][maxN],s[maxtimp][maxN],tmax,i,j,val;
struct kkt
{
long x,y;
}sir[max];
struct lista
{
long nod,cost;
lista *next;
}*g[maxN],*f;
void adauga(long x,long y,long cost)
{
lista *fc = new lista;
fc->cost = cost;
fc->nod = y;
fc->next = g[x];
g[x] = fc;
fc = new lista;
fc->cost = cost;
fc->nod = x;
fc->next = g[y];
g[y] = fc;
}
int main()
{
freopen(input,"r",stdin);
freopen(output,"w",stdout);
scanf("%ld%ld%ld%ld",&n,&m,&k,&p);
for(i = 1;i<=m;i++)
{
scanf("%ld%ld%ld",&x,&y,&c);
adauga(x,y,c);
}
for(i = 1;i<=k;i++)
{
scanf("%ld%ld%ld",&x,&y,&cost);
s[y][x] += cost;
if(y > tmax)
tmax = y;
}
for(i = 2;i<=n;i++)
C[0][i] = -1;
/* for(i = 1;i<=tmax;i++)
{
for(j = 1;j<=n;j++)
if(!s[i][j] && !C[i][j])
s[i][j] = -INF;
} */
for(i = 1;i<=p;i++)
{
scanf("%ld%ld",&x,&y);
sir[i].x = x;
sir[i].y = y;
if(y > tmax)
tmax = y;
}
for(i = 1;i<=tmax;i++)
{
for(j = 1;j<=n;j++)
{
C[i][j] = C[i-1][j];
f = g[j];
while(f)
{
x = f->nod;
c = f->cost;
if(i >= c)
{
if(C[i-c][x] > C[i][j])
C[i][j] = C[i-c][x];
val = C[i-c][x];
}
if(val == -1 && j > 1 && !C[i][j])
C[i][j] = -1;
f=f->next;
}
if(C[i-1][j] > C[i][j])
C[i][j] = C[i-1][j];
if(C[i][j]!=-1)
C[i][j] += s[i][j];
}
}
/*
for(i= 1;i<=tmax;i++)
{
for(j = 1;j<=n;j++)
printf("%ld ",C[i][j]);
printf("\n");
}
*/
for(i = 1;i<=p;i++)
{
printf("%ld\n",C[sir[i].y][sir[i].x]);
}
return 0;
}