Pagini recente » Cod sursa (job #318445) | Cod sursa (job #1249418) | Cod sursa (job #9834) | Cod sursa (job #1785659) | Cod sursa (job #551883)
Cod sursa(job #551883)
#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 ;
}