Pagini recente » Cod sursa (job #1579793) | Cod sursa (job #2654227) | Cod sursa (job #2405194) | Cod sursa (job #2118118) | Cod sursa (job #3234133)
#include <bits/stdc++.h>
#define NMAX 10001
#define MAX 1001
#define int long long
#define pb push_back
#define eb emplace_back
#define MOD 1000000007
#define nl '\n'
#define INF 10000000007
#define LLONG_MAX 9223372036854775807
#define pii pair<int,int>
#define tpl tuple<int,int,int>
#pragma GCC optimize("O3")
using namespace std;
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
int n,m,k,p;
vector<vector<pii>>G(NMAX);
int dp[3502][152],amenda[3502][152];
bool vis[3502][152];
signed main() {
fin>>n>>m>>k>>p;
for(int i=1;i<=m;++i)
{
int x,y,c;
fin>>x>>y>>c;
G[x].pb({y,c});
G[y].pb({x,c});
}
for(int i=1;i<=k;++i)
{
int x,y,c;
fin>>x>>y>>c;
y++;
amenda[y][x]+=c;
}
vis[1][1]=1;
for(int t=1;t<=3051;++t)
{
for(int i=1;i<=n;++i)
{
for(auto [first,timp]:G[i])
{
if(t-timp<=0 ||!vis[t-timp][first])
continue;
vis[t][i]=1;
dp[t][i]=max(dp[t][i],dp[t-timp][first]);
}
vis[t][i]|=vis[t-1][i];
if(vis[t][i])
dp[t][i]=max(dp[t][i],dp[t-1][i])+amenda[t][i];
}
}
for(int i=1;i<=p;++i)
{
int x,y;
fin>>x>>y;
y++;
if(vis[y][x])
fout<<dp[y][x]<<nl;
else
fout<<-1<<nl;
}
return 0;
}