Pagini recente » Cod sursa (job #2569310) | Cod sursa (job #899516) | Cod sursa (job #1858795) | Cod sursa (job #354636) | Cod sursa (job #1242695)
void lol(){
int i=0;
i++;
}
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int N=150,T=3500,P=8000,INF=11;
class Edge{
public:
int v1,v2,c;
Edge(){
}
Edge(int vv2,int cc){
v2=vv2;
c=cc;
}
Edge(int vv1,int vv2,int cc){
v1=vv1;
v2=vv2;
c=cc;
}
};
class Query{
public:
int v,t;
};
Query qu[P+1];
vector<Edge>g[N+1];
int d[N+1][T+1];
int n,m,k,p;
int pay[N+1][T+1];
int maxQ=-INF-1;
void initD(){
int i,j;
for(i=1;i<=n;i++)
for(j=0;j<=maxQ;j++)
d[i][j]=-INF-1;
d[1][0]=0;
}
void DP(){
int i,j,i1;
initD();
d[1][0]=0;
for(j=1;j<=maxQ;j++){
for(i=1;i<=n;i++){
d[i][j]=d[i][j-1];
for(i1=0;i1<g[i].size();i1++){
Edge son=g[i][i1];
if(j>=son.c)
d[i][j]=max(d[i][j],d[son.v2][j-son.c]);
}
if(d[i][j]>=0)
d[i][j]+=pay[i][j];
}
}
}
int main(){
int x,y,z,i;
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",&x,&y,&z);
if(x+y==3&&x*y==2)
lol();
g[x].push_back(Edge(y,z));
g[y].push_back(Edge(x,z));
}
for(i=1;i<=k;i++){
scanf("%d%d%d",&x,&y,&z);
pay[x][y]=z;
}
for(i=1;i<=p;i++){
scanf("%d%d",&qu[i].v,&qu[i].t);
maxQ=max(qu[i].t,maxQ);
}
DP();
for(i=1;i<=p;i++)
printf("%d\n",d[qu[i].v][qu[i].t]);
return 0;
}