Pagini recente » Cod sursa (job #3225862) | Cod sursa (job #1324431) | Cod sursa (job #1627413) | Cod sursa (job #1015192) | Cod sursa (job #294894)
Cod sursa(job #294894)
#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;
}