Cod sursa(job #551881)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 11 martie 2011 11:40:13
Problema Amenzi Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>
#include<vector>
#define Nmax 155
#define Tmax 3500
using namespace std;

int A[Nmax][Tmax+10], Amenda[Nmax][Tmax+10] ; 

int n,i,j,N,K,a,b,t,k,fiu,m,P ;

vector< pair<int, int> > G[Nmax] ; 

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 <= m ; i++ )
	{
		scanf("%d %d %d",&a,&b,&t) ; 
		
		G[a].push_back(make_pair(b,t));
		G[b].push_back(make_pair(a,t));
	}
	
	for( i = 1 ; i <= K ; i++ )
	{
		scanf("%d %d %d",&a,&b,&t);
		Amenda[a][b] = t ;
	}
	
	for( i = 2 ; i <= n ; i++ ) 
		A[i][0] = -1 ;
	
	for( j = 1 ; j <= Tmax ; j++ ) 
		for( i = 1 ; i <= n ; i++ )
		{
			A[i][j] = A[i][j-1] ;
			
			N = G[i].size() ; 
			
			for( k = 0 ; k < N ; k++ )
			{
				fiu = G[i][k].first ; 
				t = G[i][k].second ; 
				
				if( j >= t && A[fiu][j-t] > A[i][j] ) 
					A[i][j] = A[fiu][j-t] ;
			}
			
			if( A[i][j] != -1  ) A[i][j] += Amenda[i][j] ; 
		}
	
	for( i = 1 ; i <= P ; i++ )
	{
		scanf("%d %d",&a,&b);
		
		printf("%d\n",A[a][b]);
	}
	
	return 0 ; 
}