Pagini recente » Cod sursa (job #165417) | Cod sursa (job #649318) | Cod sursa (job #1913529) | Cod sursa (job #1197643) | Cod sursa (job #10693)
Cod sursa(job #10693)
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<<30);
opt[1][0] = Fine[1][0];
for( int time = 1; time <= 3500; time++ )
for( int i = 1; i <= N; i++ )
{
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;
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;
}