Pagini recente » Cod sursa (job #1009050) | Cod sursa (job #175972) | Cod sursa (job #752729) | Cod sursa (job #1427238) | Cod sursa (job #425741)
Cod sursa(job #425741)
#include <cstdio>
#include <vector>
using namespace std;
#define NMAX 154
#define TMAX 3504
#define s second
#define f first
bool viz[TMAX][NMAX];
int C[TMAX][NMAX],Am[TMAX][NMAX];
vector < pair<short,int> > A[NMAX];
int main()
{
freopen("amenzi.in","r",stdin);
int n,m,k,P,i,t;
scanf("%d %d %d %d",&n,&m,&k,&P);
for (i=1;i<=m;++i)
{ int x,y,ct;
scanf("%d %d %d",&x,&y,&ct);
A[x].push_back(make_pair(y,ct));
A[y].push_back(make_pair(x,ct));
}
for (i=1;i<=k;++i)
{ int x,y,c;
scanf("%d %d %d",&x,&y,&c);
Am[y][x]+=c;
}
memset(viz,0,sizeof(viz));
unsigned j;
C[0][1]=Am[0][1]; viz[0][1]=1;
for (t=1;t<=3500;++t)
for (i=1;i<=n;++i)
{
if (viz[t-1][i]) {viz[t][i]=1;
C[t][i]=C[t-1][i];
}
for (j=0;j<A[i].size();++j)
if (t>=A[i][j].s)
if (viz[t-A[i][j].s][A[i][j].f])
{
viz[t][i]=1;
if (C[t-A[i][j].s][A[i][j].f]>C[t][i])
C[t][i]=C[t-A[i][j].s][A[i][j].f];
}
if (viz[t][i]) C[t][i]+=Am[t][i];
}
freopen("amenzi.out","w",stdout);
for (i=1;i<=P;++i)
{ int x,y;
scanf("%d %d",&x,&y);
if (!viz[y][x]) printf("-1\n");
else printf("%d\n",C[y][x]);
}
return 0;
}