Cod sursa(job #878366)

Utilizator deea101Andreea deea101 Data 14 februarie 2013 13:33:28
Problema Amenzi Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>
#include <vector>
#define nmax 151
#define tmax 3501
using namespace std;
ifstream f("amenzi.in");
ofstream g("amenzi.out");
vector < pair <int, int> > vec[151];
int a[tmax][nmax],d[tmax][nmax];
int n,m,k,p;
int main()
{
    f>>n>>m>>k>>p;
    int i,j,x,y,c;
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>c;
        vec[x].push_back(make_pair(y,c));
        vec[y].push_back(make_pair(x,c));
    }
    for(i=1;i<=k;i++)
    {
        f>>x>>y>>c;
        a[y][x]+=c;
    }
 
    d[0][1]=a[0][1];
    if(!d[0][1]) d[0][1]=-1;
    for(i=1;i<tmax;i++)
    {
        for(j=1;j<=nmax && j<=n ;j++)
        {
            d[i][j]=d[i-1][j];
			if(a[i][j] && d[i][j]!=0) {
				if(d[i][j]<0) d[i][j]=a[i][j];
					else d[i][j]+=a[i][j]; }
            for(k=0;k<vec[j].size();k++)
            {
                x=vec[j][k].first;
                y=vec[j][k].second;
                if( i-y>=0 && d[i-y][x]!=0)
                {
					if(d[i][j]<0) d[i][j]=0;
                    if(d[i-y][x]<0) c=0;
                    else c=d[i-y][x];
                    if(c+a[i][j]>d[i][j]) d[i][j]=c+a[i][j];
                    if(!d[i][j]) d[i][j]=-1;
                }
            }
        }
    }
    for(i=1;i<=p;i++)
    {
        f>>x>>y;
        g<<d[y][x]<<'\n';
    }
 
}