Pagini recente » Cod sursa (job #222102) | Cod sursa (job #979290) | Cod sursa (job #2591620) | Cod sursa (job #1026350) | Cod sursa (job #2407291)
#include<bits/stdc++.h>
using namespace std;
ifstream f("amenzi.in");
ofstream g("amenzi.out");
int n, m, k, p;
int xtr[152][3502], mx[152][3502];
vector<pair<int, int> >v[152];
bool viz[152][3502];
int main()
{
f >> n >> m >> k >> p;
for(int i = 1; i <= m; ++i)
{
int a, b, c;
f >> a >> b >> c;
v[a].push_back({b, c});
v[b].push_back({a, c});
}
for(int i = 1; i <= k; ++i)
{
int a, b, c;
f >> a >> b >> c;
xtr[a][b] += c;
}
viz[1][0] = 1;
for(int i = 0; i <= 3500; ++i)
{
if(i)
for(int j = 1; j <= n; ++j)
{
viz[j][i] |= viz[j][i-1];
mx[j][i] = max(mx[j][i], mx[j][i-1]);
}
for(int j = 1; j <= n; ++j)
if(viz[j][i])
mx[j][i] += xtr[j][i];
for(int j = 1; j <= n; ++j)
{
if(!viz[j][i])
continue;
for(int q = 0; q < v[j].size(); ++q)
{
int vec = v[j][q].first;
int timp = v[j][q].second;
if(i+timp > 3500)
continue;
viz[vec][i+timp] = 1;
mx[vec][i+timp] = max(mx[vec][i+timp], mx[j][i]);
}
}
}
for(int i = 1; i <= p; ++i)
{
int maax = -1;
int a, b, c;
f >> a >> b;
if(viz[a][b])
maax = mx[a][b];
g << maax << '\n';
}
return 0;
}