Pagini recente » Cod sursa (job #156021) | Cod sursa (job #646935) | Cod sursa (job #560980) | Cod sursa (job #1651391) | Cod sursa (job #551878)
Cod sursa(job #551878)
#include<stdio.h>
#include<vector>
#define Nmax 155
#define Tmax 3500
using namespace std;
int A[Nmax][Tmax+10], Amenda[Nmax][Tmax+10] ;
bool viz[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 ;
}
viz[1][0] = true ;
for( j = 1 ; j <= Tmax ; j++ )
for( i = 1 ; i <= n ; i++ )
{
if( viz[i][j-1] )
{
A[i][j] = A[i][j-1] ;
viz[i][j] = true ;
}
N = G[i].size() ;
for( k = 0 ; k < N ; k++ )
{
fiu = G[i][k].first ;
t = G[i][k].second ;
if( j >= t && viz[fiu][j-t] && A[fiu][j-t] >= A[i][j] )
{
A[i][j] = A[fiu][j-t] ;
viz[i][j] = true ;
}
}
if( viz[i][j] ) A[i][j] += Amenda[i][j] ;
}
for( i = 1 ; i <= P ; i++ )
{
scanf("%d %d",&a,&b);
if( viz[a][b] )
printf("%d\n",A[a][b]);
else
printf("-1\n");
}
return 0 ;
}