Cod sursa(job #2227034)

Utilizator liviu2000Dragomirescu Liviu liviu2000 Data 30 iulie 2018 23:09:23
Problema Amenzi Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <bits/stdc++.h>
#define N 155
#define K 12005
#define T 3505

using namespace std;

ifstream fin("amenzi.in") ;
ofstream fout("amenzi.out") ;
int hotz[T][N] , dp[T][N] ;
vector<pair<int,int> > graf[N] ;
int n , m , k , p ;

void citire()
{
    int i ,x,y,c;
    fin >> n >> m >> k >> p ;
    for ( i = 1 ; i <= m ; i++ )
    {
        fin >> x >> y >> c ;
        graf[x].push_back(make_pair(y,c)) ;
        graf[y].push_back(make_pair(x,c)) ;
    }
    for ( i = 1 ; i <= k ; i++ )
    {
        fin >> x >> y >> c ;
        hotz[y][x] = c ;
    }
}

int main()
{
    int i , j , x , y ;
    citire() ;
    for ( i = 0 ; i <= T ; i++ )
        for ( j = 1 ; j <= n ; j++ )
            dp[i][j] = -1 ;
    dp[0][1] = 0 ;
    for ( i = 1 ; i <= T ; i++ )
    {
        for ( j = 1 ; j <= n ; j++ )
        {
            for ( auto vec : graf[j] )
            {
                if ( i >= vec.second )
                    dp[i][j] = max(dp[i][j],dp[i-vec.second][vec.first]) ;
            }
            dp[i][j] = max(dp[i-1][j],dp[i][j]) ;
            if ( dp[i][j] != -1 )
                dp[i][j] += hotz[i][j] ;
        }
    }
    for ( i = 1 ; i <= p ; i++ )
    {
        fin >> x >> y ;
        fout << dp[y][x] << '\n' ;
    }
}