Pagini recente » Cod sursa (job #705128) | Cod sursa (job #888559) | Cod sursa (job #2751797) | Cod sursa (job #2677819) | Cod sursa (job #1033516)
#include<fstream>
#include<cstring>
using namespace std;
typedef struct { int x,y,c; } tip;
tip graf[3505];
int i,n,m,k,p,x,y,infr[3505][155],sol[3505][155],j,c;
int main(void) {
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
fin>>n>>m>>k>>p;
for (i=1; i<=m; ++i) fin>>graf[i].x>>graf[i].y>>graf[i].c;
for (i=1; i<=m; ++i) { graf[i+m].x=graf[i].y; graf[i+m].y=graf[i].x; graf[i+m].c=graf[i].c; }
m*=2;
for (i=1; i<=n; ++i) {
++m;
graf[m].x=graf[m].y=i; graf[m].c=1;
}
for (i=1; i<=k; ++i) {
fin>>x>>y; int aux; fin>>aux; infr[y][x]+=aux;
}
// sol[i][j]= amenda maxima daca in momentul i ma aflu in intersectia j
for (i=2; i<=n; ++i) sol[0][i]=-1;
for (i=1; i<=3500; ++i){
memset(sol[i],-1,sizeof(sol[i])); //for (j=1; j<=n; ++j) sol[i][j]=-1;
for (j=1; j<=m; ++j)
if (i-graf[j].c>=0&&sol[i-graf[j].c][graf[j].x]!=-1&&sol[i-graf[j].c][graf[j].x]+infr[i][graf[j].y]>=sol[i][graf[j].y])
sol[i][graf[j].y]=sol[i-graf[j].c][graf[j].x]+infr[i][graf[j].y];
}
for (i=1; i<=p; ++i) {
fin>>x>>y;
fout<<sol[y][x]<<"\n";
}
return(0);
}