Pagini recente » Cod sursa (job #614075) | Cod sursa (job #698604) | Cod sursa (job #1997717) | Cod sursa (job #113439) | Cod sursa (job #9917)
Cod sursa(job #9917)
#include <stdio.h>
#include <string.h>
#define MaxT 3600
#define MaxN 160
int n, m, nr, nq;
int win[MaxN][MaxT], best[MaxN][MaxT];
int vec[MaxN][MaxN], t[MaxN][MaxN], gr[MaxN];
void expand(int k, int timp)
{
int i, b=best[k][timp];
if (b + win[k][timp+1] > best[k][timp+1]) best[k][timp+1]=b + win[k][timp+1];
for (i=0; i<gr[k]; i++){
int v = vec[k][i];
int ora = timp + t[k][i];
if (ora < MaxT && b+win[v][ora] > best[v][ora])
best[v][ora]=b+win[v][ora];
}
}
int main()
{
freopen("amenzi.in", "r", stdin);
freopen("amenzi.out", "w", stdout);
int i,j,k;
scanf("%d %d %d %d", &n, &m, &nr, &nq);
while (m--){
scanf("%d %d %d", &i, &j, &k);
i--; j--;
vec[i][gr[i]]=j; t[i][gr[i]++]=k;
vec[j][gr[j]]=i; t[j][gr[j]++]=k;
}
for (i=0; i<n; i++)
memset(best[i], -1, 4*MaxT);
while (nr--){
scanf("%d %d %d", &i, &j, &k);
win[i-1][j]+=k;
}
best[0][0]=win[0][0];
for (j=0; j<=3500; j++)
for (i=0; i<n; i++)
if (best[i][j]>=0) expand(i,j);
while (nq--){
scanf("%d %d", &i, &j);
printf("%d\n", best[i-1][j]);
}
return 0;
}