Cod sursa(job #1420037)

Utilizator Liviu98Dinca Liviu Liviu98 Data 17 aprilie 2015 13:38:36
Problema Amenzi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <vector>
#include <stdio.h>
#define TMax 3501
#define NMax 155
using namespace std;
vector< pair<int,int> > Graf[NMax];
int D[NMax][TMax],A[NMax][TMax];
int N,M,K,P,x,y,c;

void Read()
{
    freopen("amenzi.in","r",stdin);
    scanf("%d%d%d%d",&N,&M,&K,&P);
    for(int i=1;i<=M;i++)
    {
        scanf("%d%d%d",&x,&y,&c);
        Graf[x].push_back(make_pair(y,c));
        Graf[y].push_back(make_pair(x,c));
    }
    for(int i=1;i<=K;i++)
    {
        scanf("%d%d%d",&x,&y,&c);
        A[x][y]+=c;
    }
}

void Initialization()
{
    for(int i=1;i<=NMax;i++)
    for(int j=0;j<=TMax;j++)
    D[i][j]=-1;
    D[1][0]=0;
}

void Solve()
{
    for(int i=0;i<TMax;i++)
    for(int j=1;j<=N;j++)
    {
        if(i>0)
            D[j][i]=D[j][i-1];
        for(vector< pair<int,int> >::iterator it=Graf[j].begin();it!=Graf[j].end();it++)
            if(i>=it->second)
            D[j][i]=max(D[j][i],D[it->first][i-it->second]);
        if(D[j][i]!=-1)
            D[j][i]+=A[j][i];
    }
}

void Write()
{
    freopen("amenzi.out","w",stdout);
    for(int i=1;i<=P;i++)
    {
        scanf("%d%d",&x,&y);
        printf("%d\n",D[x][y]);
    }
}

int main()
{
    Read();
    Initialization();
    Solve();
    Write();
}