Pagini recente » Cod sursa (job #336450) | Cod sursa (job #256316) | Cod sursa (job #1059288) | Cod sursa (job #2951895) | Cod sursa (job #1240537)
#include <fstream>
#include <vector>
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define NOT -1
const char IN [ ] = "amenzi.in" ;
const char OUT [ ] = "amenzi.out" ;
const int MAX_N = 154 ;
const int MAX_T = 3514 ;
using namespace std;
typedef pair < int , int > P ;
ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;
vector < P > gr [ MAX_N ] ;
int amenzi [ MAX_T ] [ MAX_N ] , dp [ MAX_T ] [ MAX_N ] , n ;
void do_the_acceptedjob ( ) ;
int main( )
{
int m , k , p ;
fin >> n >> m >> k >> p ;
for ( ; m ; -- m )
{
int x , y , cost ;
fin >> x >> y >> cost ;
gr [ x ].pb ( mp ( y , cost ) ) ;
gr [ y ].pb ( mp ( x , cost ) ) ;
}
for ( ; k ; -- k )
{
int x , y , cost ;
fin >> x >> y >> cost ;
amenzi [ y ] [ x ] = amenzi [ y ] [ x ] + cost ;
}
do_the_acceptedjob ( ) ;
for ( int i = 1 ; i <= p ; ++ i )
{
int a , b ;
fin >> a >> b ;
fout << dp [ b ] [ a ] << '\n' ;
}
return 0;
}
void do_the_acceptedjob ( )
{
dp [ 0 ] [ 1 ] = 0 ;
for ( int i = 2 ; i <= n ; ++ i )
dp [ 0 ] [ i ] = NOT ;
for ( int t = 1 ; t <= 3500 ; ++ t )
for ( int i = 1 ; i <= n ; ++ i )
{
dp [ t ] [ i ] = dp [ t - 1 ] [ i ] ;
if ( dp [ t ] [ i ] != NOT )
dp [ t ] [ i ] += amenzi [ t ] [ i ] ;
int solll = NOT ;
for ( auto x : gr [ i ] )
{
int nod = x.f ;
int cost = x.s ;
if ( t - cost < 0 )
continue ;
solll = max ( solll , dp [ t - cost ] [ nod ] ) ;
}
if ( solll != NOT )
dp [ t ] [ i ] = max ( dp [ t ] [ i ] , solll + amenzi [ t ] [ i ] ) ;
}
}