Pagini recente » Cod sursa (job #3139336) | Cod sursa (job #148716) | Cod sursa (job #2752408) | Cod sursa (job #2776560) | Cod sursa (job #3279259)
#include <fstream>
#include <queue>
#include <vector>
#define tmax 3501
using namespace std;
ifstream cin("amenzi.in");
ofstream cout("amenzi.out");
int n,m,k,p,x,y,t,dp[151][tmax],a[151][tmax];
struct elem{
int x,t;
};
vector<elem>v[151];
void dial(){
for(int i=1;i<=n;i++)
for(int j=0;j<tmax;j++)
dp[i][j]=-1;
dp[1][0]=0;
for(int t=0;t<tmax;t++)
for(int nod=1;nod<=n;nod++)
if(dp[nod][t]!=-1)
for(auto i:v[nod])
if(t+i.t<tmax&&dp[i.x][t+i.t]<dp[nod][t]+a[i.x][t+i.t])
dp[i.x][t+i.t]=dp[nod][t]+a[i.x][t+i.t];
}
signed main()
{
cin>>n>>m>>k>>p;
for(int i=1;i<=m;i++){
cin>>x>>y>>t;
v[x].push_back({y,t});
v[y].push_back({x,t});
}
for(int i=1;i<=n;i++)
v[i].push_back({i,1});
for(int i=1;i<=k;i++){
cin>>x>>y>>t;
a[x][y]+=t;
}
dial();
for(int i=1;i<=p;i++){
cin>>x>>y;
cout<<dp[x][y]<<'\n';
}
return 0;
}