Cod sursa(job #294894)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 2 aprilie 2009 20:30:29
Problema Amenzi Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<stdio.h>
#include<string.h>

int main()
{
	int n,m,k,p,i,sursa,dest,timp,mom,amend,nod;
	int cost[151][1501],ad[151][1501],amenzi[151][3501];	
	int best[151][3501],time,j;
	FILE *f=fopen("amenzi.in","r");
	FILE *g=fopen("amenzi.out","w");

	memset(ad,0,151*1501*sizeof(int));
	memset(amenzi,0,3501*151*sizeof(int));
	for(i=0;i<=150;i++)
		for(j=0;j<=3500;j++)
			best[i][j]=-1;
			

	fscanf(f,"%i%i%i%i",&n,&m,&k,&p);
	for(i=0;i<m;i++)
	{
		fscanf(f,"%i%i%i",&sursa,&dest,&timp);
		cost[sursa-1][dest-1]=timp;
		cost[dest-1][sursa-1]=timp;
		ad[sursa-1][0]++;
		ad[sursa-1][ad[sursa-1][0]]=dest-1;
		ad[dest-1][0]++;
		ad[dest-1][ad[dest-1][0]]=sursa-1;
	}

	for(i=0;i<k;i++)
	{
		fscanf(f,"%i%i%i",&sursa,&mom,&amend);
		if(amend>amenzi[sursa-1][mom])
			amenzi[sursa-1][mom]=amend;
	}
	best[0][0]=amenzi[0][0];	
	
	for(i=1;i<=3500;i++)
	{
		for(j=0;j<n;j++)
		{
			for(k=1;k<=ad[j][0];k++)
			{
				nod=ad[j][k];
				if(i-cost[j][nod]>=0)
				{
					time=i-cost[j][nod];
					if(best[nod][time]+amenzi[j][i]>best[j][i] && best[nod][time]!=-1)
						best[j][i]=best[nod][time]+amenzi[j][i];
				}
			}
			if(best[j][i-1]+amenzi[j][i]>best[j][i] && best[j][i-1]!=-1)
				best[j][i]=best[j][i-1]+amenzi[j][i];
		}
	}
	
	for(i=0;i<p;i++)
	{
		fscanf(f,"%i%i",&sursa,&mom);
		fprintf(g,"%i\n",best[sursa-1][mom]);
	}
	fclose(f);
	fclose(g);
	return 0;
}