Pagini recente » Cod sursa (job #330283) | Cod sursa (job #2627884) | Cod sursa (job #651541) | Cod sursa (job #2902109) | Cod sursa (job #345699)
Cod sursa(job #345699)
#include <stdio.h>
#include <vector>
#include <algorithm>
#define Nmax 155
#define Pmax 8005
#define Mmax 1505
#define Kmax 12005
#define Tmax 3505
#define pb push_back
#define mp make_pair
#define urm first
#define c second
#define IT vector < pair<int,int> >:: iterator
using namespace std;
vector< pair<int,int> > v[Nmax];
int n,m,p,k;
int i,j;
int d[Tmax][Nmax];
vector< pair<int,int> > a[Tmax];
IT it[Nmax];
void read(){
int i,aa,b,c; IT q;
freopen("amenzi.in","r",stdin);
freopen("amenzi.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&k,&p);
for(i=1;i<=m;++i){
scanf("%d%d%d",&aa,&b,&c);
v[aa].pb(mp(b,c));
v[b].pb(mp(aa,c));
}
for(i=1;i<=k;++i){
scanf("%d%d%d",&aa,&b,&c);
a[aa].pb(mp(b,c));
}
for(i=1;i<=n;++i){
sort(a[i].begin(),a[i].end());
}
}
void work(){
int i,j,t; IT k;
for(i=0;i<Tmax;++i)
for(j=1;j<=n;++j) d[i][j]=-1;
for(i=1;i<=n;++i) it[i]=a[i].begin();
d[0][1]=0;
for(t=0;t<Tmax;++t){
for(j=1;j<=n;++j){
if(t>0) d[t][j]=max(d[t][j],d[t-1][j]);
for( k=v[j].begin(); k!=v[j].end();k++ )
if(t- k->c >=0) d[t][j]=max(d[t][j],d[t- k->c][k->urm]);
if(d[t][j] ==-1) continue;
for( ; it[j]!=a[j].end() && it[j]->urm<t; it[j]++);
for( ; it[j]!=a[j].end() && it[j]->urm==t; it[j]++ )
d[t][j] += it[j]->c;
}
}
}
void solve(){
int i,a,b;
for(i=1;i<=p;++i){
scanf("%d%d",&a,&b);
printf("%d\n",d[b][a]);
}
fclose(stdin); fclose(stdout);
}
int main(){
read();
work();
solve();
return 0;
}