Cod sursa(job #45359)

Utilizator mika17Mihai Alex Ionescu mika17 Data 1 aprilie 2007 13:52:33
Problema Amenzi Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <stdio.h>
#include <string.h>
#define fin "amenzi.in"
#define fout "amenzi.out"
#define TMAX 3501
#define NMAX 151
FILE * f;
int a[NMAX][NMAX],s[TMAX][NMAX],N,M,K,P;
void readData()
{
 f = fopen(fin,"r");
 fscanf(f,"%d %d %d %d",&N,&M,&K,&P); fprintf(stderr,"%d",P);
 for(int i = 0 ,x,y,c ;i<M;++i)
    {
     fscanf(f,"%d %d %d",&x,&y,&c);
     a[x][y] = a[y][x] = c;
    }
 for(int i = 0 ,x,y,c;i<K;++i)
    {
     fscanf(f,"%d %d %d",&x,&y,&c);
     s[y][x] = c;
    }
}

void init()
{
 memset(s,-1,sizeof s);
}

void query()
{
 FILE * g = fopen(fout,"w");
 for(int i = 0,x,y; i < P ; ++i)
    {
    fscanf(f,"%d %d",&x,&y);
    fprintf(g,"%d\n",s[y][x]);
    }
 fclose(f);
 fclose(g);
}

void calc()
{
 int max;
 s[0][1] = 0;
 for ( int i = 1 ; i<TMAX ; ++i)

    for ( int j = 1;j<=N; ++j)
       {
       max = s[i-1][j];
       for(int k = 1 ; k <=N ; ++k)
          if(k!=j & a[k][j]>0 & i-a[k][j]>=0 & s[ i - a[k][j] ][ k ]!=-1)
            if(s[ i-a[k][j] ][ k ] > max)
              max = s[ i - a[k][j] ][ k ];
       if(s[i][j]!=-1 & max!=-1) s[i][j] += max;
        else s[i][j] = max;
       }
}

void afis()
{
 FILE * g = fopen(fout,"w");
 for(int i=0;i<TMAX;++i)   {
    for(int j=1;j<=N;++j)
     fprintf(g,"%d    ",s[i][j]);
    fprintf(g,"\n");
    }
}

int main()
{
 init();
 readData();
 calc();
 query();
 return 0;
}