Pagini recente » Cod sursa (job #1573616) | Cod sursa (job #3223918) | Cod sursa (job #1988788) | Cod sursa (job #2535346) | Cod sursa (job #2405533)
#include<bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define s second
#define f first
using namespace std ;
const int N = 151 , T = 3501 ;
ifstream in ("amenzi.in") ;
ofstream out ("amenzi.out") ;
int dp [ T ][ N ] , cost [ T ][ N ] , n , m , k , p ;
vector < pair < int , int > > v [ N ] ;
int main () {
vector < pair < int , int > > :: iterator it ;
int x , y , i, z , t ;
in >> n >> m >> k >> p ;
while ( m -- ) {
in >> x >> y >> z ;
v [ x ].pb ( mp ( y , z ) ) ;
v [ y ].pb ( mp ( x , z ) ) ;
}
while ( k -- ) {
in >> y >> x >> z ;
cost [ x ][ y ] += z ;
}
for ( t = 0 ; t <= T ; ++ t )
for ( i = 0 ; i <= n ; ++ i ) dp [ t ][ i ] = -1 ;
dp [ 0 ][ 1 ] = cost [ 0 ][ 1 ] ;
for ( t = 1 ; t <= T ; ++ t )
for ( i = 1 ; i <= n ; ++ i ) {
dp [ t ][ i ] = dp [ t - 1 ][ i ] ;
for ( it = v [ i ].begin() ; it != v [ i ].end() ; ++ it ) {
if ( (*it).s <= t )
dp [ t ][ i ] = max ( dp [ t ][ i ] , dp [ t - (*it).s ][ (*it).f ] ) ;
}
if ( dp [ t ][ i ] != -1 ) dp [ t ][ i ] += cost [ t ][ i ] ;
}
while ( p -- ) {
in >> y >> x ;
out << dp [ x ][ y ] << '\n' ;
}
}