Pagini recente » Cod sursa (job #964871) | Cod sursa (job #1545646) | Cod sursa (job #1015639) | Cod sursa (job #338530) | Cod sursa (job #10694)
Cod sursa(job #10694)
using namespace std;
#include <cstdio>
#include <vector>
int N, M, K, P, Fine[151][3502], opt[151][3502];
vector<int> g[151], co[151];
int main()
{
freopen("amenzi.in", "r", stdin);
freopen("amenzi.out", "w", stdout);
scanf("%d %d %d %d", &N, &M, &K, &P);
int a, b, c;
for( int i = 1; i <= M; i++ )
{
scanf("%d %d %d", &a, &b, &c);
g[a].push_back(b), g[b].push_back(a);
co[a].push_back( c ), co[b].push_back( c );
}
for( int i = 1; i <= K; i++ )
{
scanf("%d %d %d", &a, &b, &c );
Fine[a][b] >?= c;
}
for( int time = 0; time <= 3500; time++ )
for( int i = 1; i <= N; i++ )
opt[i][time] = -1;
opt[1][0] = Fine[1][0];
for( int time = 1; time <= 3500; time++ )
for( int i = 1; i <= N; i++ )
{
if( opt[i][time-1] >= 0 )
opt[i][time] >?= opt[i][time-1] + Fine[i][time];
for( int j = 0; j < (int)g[i].size(); j++ )
{
a = g[i][j], c = co[i][j];
if( c > time )
continue;
if( opt[a][time-c] >= 0 )
opt[i][time] >?= opt[ a ][ time - c ] + Fine[i][time];
}
}
for( int i = 1; i <= P; i++ )
{
scanf("%d %d", &a, &b);
printf("%d\n", (opt[a][b] >= 0 ) ? opt[a][b]: -1 );
}
return 0;
}