Pagini recente » Cod sursa (job #2607568) | Cod sursa (job #2400631) | Cod sursa (job #1151468) | Cod sursa (job #2146609) | Cod sursa (job #1033512)
#include<fstream>
using namespace std;
typedef struct celula{
int nod;
celula *next;
}*lista;
lista graf[155],v;
int i,n,m,k,p,x,y,cost[155][155],infr[3505][155],sol[3505][155],j;
int main(void) {
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
fin>>n>>m>>k>>p;
for (i=1; i<=m; ++i) {
fin>>x>>y; fin>>cost[x][y]; cost[y][x]=cost[x][y];
v=new celula; v->nod=x; v->next=graf[y]; graf[y]=v;
v=new celula; v->nod=y; v->next=graf[x]; graf[x]=v;
}
for (i=1; i<=k; ++i) {
fin>>x>>y; int aux; fin>>aux; infr[y][x]=max(aux,infr[y][x]);
}
// 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)
for (j=1; j<=n; ++j){
bool ok=1;
for (lista p=graf[j]; p; p=p->next)
if (i-cost[p->nod][j]>=0&&sol[i-cost[p->nod][j]][p->nod]!=-1&&sol[i-cost[p->nod][j]][p->nod]>=sol[i][j]){
sol[i][j]=sol[i-cost[p->nod][j]][p->nod];
ok=0;
}
if (ok) sol[i][j]=-1; else sol[i][j]+=infr[i][j];
}
for (i=1; i<=p; ++i) {
fin>>x>>y;
fout<<sol[y][x]<<"\n";
}
return(0);
}