Cod sursa(job #263882)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 20 februarie 2009 21:45:49
Problema Amenzi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstdio>

int N, M, K, P, C[3505][155], a[155][155], am[3505][155];

typedef struct nod
{
	int x, c;
	nod *a;
} *pNod;
pNod v[155];

int max(int x, int y) { return x > y ? x : y;}

void init()
{
	int i, j;
	for (i = 0; i <= 3500; i++)
		for (j = 1; j <= N; j++) C[i][j] = -1;
}


int main()
{
	freopen("amenzi.in","r",stdin);
	freopen("amenzi.out","w",stdout);

	int i, j, k, x, y, c;

	scanf("%d %d %d %d", &N, &M, &K, &P);

	for (i = 1; i <= M; i++)
	{
		scanf("%d %d %d", &x, &y, &c);
		a[x][y] = a[y][x] = c;
	}

	init();


	for (i = 1; i <= K; i++)
	{
		scanf("%d %d %d", &x, &y, &c);
		am[y][x] += c;
	}
	C[0][1] = 0;

	for (i = 0; i <= 3500; i++)
	{
		for (j = 1; j <= N; j++)
		{
			if (C[i][j] != -1)
			{			
				C[i][j] += am[i][j];
				C[i + 1][j] = max(C[i][j], C[i + 1][j]);			
				
				for (k = 1; k <= N; k++)					
					if (i + a[j][k] <= 3500) C[i + a[j][k]][k] = max(C[i][j], C[i + a[j][k]][k]);				
		
			}
//			printf("%6d ",C[i][j]);
		}
//		printf("\n");
	}

	for (i = 1; i <= P; i++)
	{
		scanf("%d %d", &x, &y);
		printf("%d\n", C[y][x]);
	}
	return 0;
}