Cod sursa(job #1809740)

Utilizator raulmuresanRaul Muresan raulmuresan Data 19 noiembrie 2016 11:08:08
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 kb
#include <fstream>
#include <algorithm>
#include <cstring>
#include<vector>
#include<set>
#define TMax 3500

using namespace std;

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

int componente,i,aux,n,k,j,p,s,unu,t,m,doi,x,q,st,dr,timp,y;
int nod, sum;
vector <pair<int,int> > v[159];
int a[159][3509];
//a[i][j] = suma amenzilor care se dau la intersectia i la timpul j
int d[159][3509];
//d[i][j] = profitul maxim pentru a fi la intersectia i la timpul j

void solve()
{
    int i, j, q;
    memset(d, -1, sizeof(d));
    d[1][0] = 0;
    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= TMax;j++)
        {
           // fout << d[i][j] <<" ";
        }
        //fout << "\n";
    }
    for(i = 0; i < v[1].size(); i++)
    {
        //d[v[1][i].first][v[1][i].second] = max(a[v[1][i].first][v[1][i].second], 0);
    }

    for(i = 1; i <= TMax; i++)
    {
        for(j = 1; j <= n; j++)
        {
            for(q = 0; q < v[j].size(); q++)
            {
                if(i - v[j][q].second >= 0)
                {
                    //fout<<"ok\n";
                    d[j][i] = max(d[j][i], d[v[j][q].first][i - v[j][q].second] );
                }
            }
            if(d[j][i] >=  0)
            {
                d[j][i] += a[j][i];
            }
        }
    }
}

int main()
{
    fin >> n >> m >> k >> p;
    for(i = 1; i <= m; i++)
    {
        fin >> x >> y >> timp;
        v[x].push_back(make_pair(y, timp));
        v[y].push_back(make_pair(x, timp));
    }
    for(i = 1; i <= n; i++)
    {
        //tratam cazul cand asteapta 1 unitate de timp
        v[i].push_back(make_pair(i, 1));
    }

    for(i = 1; i <= k; i++)
    {
        fin >> nod >> timp >> sum;
        a[nod][timp] += sum;
    }

    solve();

    for(i = 1; i <= 1; i++)
    {
        for(j = 1; j <= TMax;j++)
        {
            //fout << d[i][j] <<" ";
        }
        //fout << "\n";
    }

    for(i = 1; i <= p; i++)
    {
        fin >> nod >> timp;
        fout << d[nod][timp] <<" \n";
    }



}