Cod sursa(job #2405533)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 14 aprilie 2019 17:06:06
Problema Amenzi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#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' ;
    }
}