Pagini recente » Cod sursa (job #1870753) | Cod sursa (job #1358648) | Cod sursa (job #1350942) | Cod sursa (job #2380039) | Cod sursa (job #2918347)
#include <bits/stdc++.h>
#define NMAX 158
#define TMAX 3508
#define KMAX 12008
#define PMAX 8008
using namespace std;
ifstream fin ("amenzi.in");
ofstream fout ("amenzi.out");
int n, m, k, p;
int amenda[TMAX][NMAX], lgs[KMAX], dp[TMAX][NMAX], sol[PMAX];
vector < pair <int, int> > G[NMAX];
vector < pair <int, int> > sotie[NMAX];
int main()
{
int a, b, c;
fin >> n >> m >> k >> p;
for (int i = 1; i <= m; i++)
{
fin >> a >> b >> c;
G[a].push_back({b, c});
G[b].push_back({a, c});
}
for (int i = 1; i <= k; i++)
{
fin >> a >> b >> c;
amenda[b][a] += c;
}
for (int i = 1; i <= p; i++)
{
fin >> a >> b;
sotie[a].push_back({b, i});
}
for (int i = 1; i <= n; i++)
sort(sotie[i].begin(), sotie[i].end());
for (int t = 0; t <= 3500; t++)
for (int i = 1; i <= n; i++)
dp[t][i] = -1e9;
dp[0][1] = amenda[0][1];
for (int t = 1; t <= 3500; t++)
for (int i = 1; i <= n; i++)
{
/*if (!timp[i].empty() && timp[i][lg[i]] == t) ///intersectie cu amenda
{
dp[t][i] = dp[t-1][i];
int val = 0;
for (auto vecin : G[i])
val = max(val, dp[t-vecin.second][vecin.first]);
val += amenda[t][i];
dp[t][i] = max(dp[t][i], val);
lg[i]++;
}*/
//else
//{
int val = -1e9;
for (auto vecin : G[i])
if (t - vecin.second >= 0)
val = max(val, dp[t-vecin.second][vecin.first]);
if (val >= 0)
{
val += amenda[t][i];
dp[t][i] = max(dp[t-1][i], val);
}
//}
if (!sotie[i].empty() && sotie[i][lgs[i]].first == t) ///intersectie cu sotia
{
sol[sotie[i][lgs[i]].second] = dp[t][i];
lgs[i]++;
}
}
for (int i = 1; i <= p; i++)
fout << sol[i] << '\n';
return 0;
}