Cod sursa(job #10717)

Utilizator love_for_uSpancioc Riana love_for_u Data 29 ianuarie 2007 01:32:14
Problema Amenzi Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb

#include <stdio.h>
#define MAX(a, b) ( (a) < (b) ? (b) : (a) )
#define NMAX 151
#define TMAX 3501
#define INF 1000000001

int V[NMAX][NMAX];
int A[TMAX][NMAX];
int Amenda[TMAX][NMAX];
int i, j, N, M, K, P;
int x, y, z, c, t, k;
int oras, time;

void printare()
{
	printf("\n");
	
	for (i = 1; i <= N; i++)
	{
		for (j = 0; j <= TMAX - 1; j++)
		{
			//scanf("%d %d", &oras, &time);
		
			printf("%d ", A[j][i]);	
		}
	
		printf("\n");
	}
}

int main()
{
	freopen("amenzi.in", "r", stdin);
	freopen("amenzi.out", "w", stdout);
	
	scanf("%d %d %d %d", &N, &M, &K, &P);
	
	for (i = 1; i <= N; i++)
		for (j = 1; j <= N; j++) V[i][j] = -INF;
	
	for (i = 1; i <= M; i++) 
	{	
		scanf("%d %d %d", &x, &y, &z);
		
		V[x][y] = z;
		V[y][x] = z;
	}
	
		
	for (i = 1; i <= K; i++) 
	{	
		scanf("%d %d %d", &x, &y, &z);
		
	    Amenda[y][x] = z;
	}
	
	for(t = 0; t <= TMAX - 1; t++)
		   for(i = 1; i <= N; i++) A[t][i] = -INF;
	
	A[0][1] = 0;
	
	for (t = 0; t <= TMAX - 1; t++)
	{
		for (j = 1; j <= N; j++)
			for (i = 1; i <= N; i++)
			if (V[j][i]>0)
			{
				c = V[j][i];
				
				if (t-c >= 0 && (A[t-c][j] >= 0 || A[t-1][i] >= 0)) A[t][i] = MAX ( MAX (A[t-c][j], A[t-1][i]) + Amenda[t][i], A[t][i]);				
			}
			
		//printare();
	}
	
	
	for (i = 1; i <= P; i++)
	{
		scanf("%d %d", &oras, &time);
		
		printf("%d\n", A[time][oras]);	
	}
	
	
	return 0;
}