Cod sursa(job #12020)

Utilizator moga_florianFlorian MOGA moga_florian Data 2 februarie 2007 17:20:49
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
using namespace std;
#include<fstream>
#include<stdio.h>
#define nmax 155
#define tmax 3505

int vec[nmax][nmax],nvec[nmax];
int cas[nmax][tmax];
int timp[nmax][nmax];
int a[nmax][tmax];

int main()
{
FILE *fin=fopen("amenzi.in","r"),
     *fout=fopen("amenzi.out","w");
    
memset(nvec,0,sizeof nvec);
int n,m,k,p,i,j,t;
int x,y,c;

fscanf(fin,"%d%d%d%d",&n,&m,&k,&p);
for(i=1;i<=m;i++)
  {
  fscanf(fin,"%d%d%d",&x,&y,&c);
  vec[x][++nvec[x]]=y;
  vec[y][++nvec[y]]=x;
  timp[x][y]=timp[y][x]=c;                   
  }
  
for(i=1;i<=n;i++)
     a[i][0]=-1;
     
memset(cas,0,sizeof cas);
for(i=1;i<=k;i++)
  {
  fscanf(fin,"%d%d%d",&x,&y,&c);
  cas[x][y]+=c;
  }
     
a[1][0]=0;
for(t=1;t<=3500;t++)
  for(i=1;i<=n;i++)
    {
    a[i][t]=a[i][t-1];
    for(j=1;j<=nvec[i];j++)                  
        if(t>=timp[i][vec[i][j]]&&a[vec[i][j]][t-timp[i][vec[i][j]]]>a[i][t])
            a[i][t]=a[vec[i][j]][t-timp[i][vec[i][j]]];
        
    if(a[i][t]>=0)
       a[i][t]+=cas[i][t];
    }
    
for(i=1;i<=p;i++)
  {
  fscanf(fin,"%d%d",&x,&y);
  fprintf(fout,"%d\n",a[x][y]);               
  }
  
fclose(fin);
fclose(fout);
return 0;
}