Cod sursa(job #1099131)

Utilizator Athena99Anghel Anca Athena99 Data 5 februarie 2014 16:26:27
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("amenzi.in");
ofstream fout("amenzi.out");

const int nmax= 150;
const int tmax= 3500;

struct str {
    int x, y;
};
vector <str> v[nmax+1];

inline str mp( int x, int y ) {
    str sol;
    sol.x= x, sol.y= y;
    return sol;
}

int c[tmax+1][nmax+1], d[tmax+1][nmax+1];

int main(  ) {
    int n, m, k, p;
    fin>>n>>m>>k>>p;
    for ( ; m; --m ) {
        int x, y, z;
        fin>>x>>y>>z;
        v[x].push_back( mp( y, z ) );
        v[y].push_back( mp( x, z ) );
    }
    for ( ; k; --k ) {
        int y, x, z;
        fin>>y>>x>>z;
        c[x][y]+= z;
    }

    d[0][1]= 1;
    for ( int i= 1; i<tmax; ++i ) {
        for ( int j= 1; j<=n; ++j ) {
            d[i][j]= d[i-1][j];
            
            for ( int k= 0; k<(int)v[j].size(); ++k ) {
                if ( v[j][k].y<=i && d[i][j]<d[i-v[j][k].y][v[j][k].x] ) {
                    d[i][j]= d[i-v[j][k].y][v[j][k].x];
                }
            }
            
            if ( d[i][j]>0 ) {
                d[i][j]+= c[i][j];
            }
        }
    }

    for ( ; p; --p ) {
        int y, x;
        fin>>y>>x;
        fout<<d[x][y]-1<<"\n";
    }

    return 0;
}