Pagini recente » Cod sursa (job #3264771) | Cod sursa (job #483267) | Cod sursa (job #841534) | Cod sursa (job #1408179) | Cod sursa (job #11587)
Cod sursa(job #11587)
#include <stdio.h>
#define input "amenzi.in"
#define output "amenzi.out"
#define nmax 151
#define tmax 3501
long n,m,p,k,i,j,a,b,c,v[nmax][nmax],timp,nod,cost,amenda[nmax][tmax],ajunge[tmax][nmax],max,intersectie;
long s[tmax][nmax],nv[nmax],tp[nmax][nmax];
int main()
{
FILE *fin, *fout;
fin=fopen(input,"r");
fout=fopen(output,"w");
fscanf(fin,"%ld %ld %ld %ld",&n,&m,&k,&p);
for (i=1;i<=m;i++)
{
fscanf(fin,"%ld %ld %ld",&a,&b,&c);
v[a][++nv[a]]=b;
v[b][++nv[b]]=a;
tp[a][nv[a]]=c;
tp[b][nv[b]]=c;
}
for (i=1;i<=k;i++)
{
fscanf(fin,"%ld %ld %ld",&nod,&timp,&cost);
amenda[nod][timp]=cost;
}
ajunge[0][1]=1;
for (timp=0;timp<tmax;timp++)
for (i=1;i<=n;i++)
{
if (ajunge[timp][i]) ajunge[timp+1][i]=ajunge[timp][i];
if (ajunge[timp][i]==1)
for (k=1;k<=nv[i];k++)
ajunge[timp+tp[i][k]][v[i][k]]=1;
}
for (timp=0;timp<tmax;timp++)
for (i=1;i<=n;i++)
if (ajunge[timp][i])
{
max=0;
for (k=1;k<=nv[i];k++)
if (ajunge[timp-tp[i][k]][v[i][k]])
if (s[timp-tp[i][k]][v[i][k]]>max)
max=s[timp-tp[i][k]][v[i][k]];
s[timp][i]=max+amenda[i][timp];
}
for (i=1;i<=p;i++)
{
fscanf(fin,"%ld %ld",&intersectie,&timp);
fprintf(fout,"%ld\n",s[timp][intersectie]);
}
fclose(fin);
fclose(fout);
return 0;
}