Pagini recente » Cod sursa (job #781533) | Cod sursa (job #2514431) | Cod sursa (job #902318) | Cod sursa (job #2761851) | Cod sursa (job #1741280)
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#define MAXN 160
#define MAXT 3510
using namespace std;
vector<pair<int,int> > g[MAXN];
vector<pair<int,int> >::iterator it;
int cost[MAXT][MAXN],dp[MAXT][MAXN];
int main(){
freopen("amenzi.in","r",stdin);
freopen("amenzi.out","w",stdout);
int n,m,k,p,i,j,a,b,c;
scanf("%d%d%d%d",&n,&m,&k,&p);
for(i=1;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
g[a].push_back(make_pair(b,c));
g[b].push_back(make_pair(a,c));
}
for(i=1;i<=k;i++){
scanf("%d%d%d",&a,&b,&c);
cost[b][a]+=c;
}
memset(dp,-1,sizeof(dp));
dp[0][1]=0;
for(i=1;i<=3500;i++)
for(j=1;j<=n;j++){
for(it=g[j].begin();it!=g[j].end();it++)
if(it->second<=i)
dp[i][j]=max(dp[i][j],dp[i-it->second][it->first]);
dp[i][j]=max(dp[i][j],dp[i-1][j]);
if(dp[i][j]>=0)
dp[i][j]+=cost[i][j];
}
for(i=1;i<=p;i++){
scanf("%d%d",&a,&b);
printf("%d\n",dp[b][a]);
}
return 0;
}