Pagini recente » Cod sursa (job #2502019) | Cod sursa (job #470776) | Cod sursa (job #1352762) | Cod sursa (job #1486401) | Cod sursa (job #2513258)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("amenzi.in");
ofstream g ("amenzi.out");
vector<pair<int,int> >graph[155];
struct amenda{
int nod, timp, cost;
};
vector<amenda>amenzi;
int n, m, k, p, from, to, cost, valmax[12005], nod, timp;
int dp[155][155];
void rf()
{
for (int k=1; k<=n; ++k)
{
for (int i=1; i<=n; ++i)
{
for (int j=1; j<=n; ++j)
{
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
}
}
}
}
class cmp{
public:
bool operator()(amenda a, amenda b)
{
if (a.timp==b.timp)
return a.cost<b.cost;
return a.timp<b.timp;
}
};
void citire()
{
f >> n >> m >> k >> p;
for (int i=1; i<=n; ++i)
for (int j=1; j<=n; ++j)
{
if (i==j)
continue;
dp[i][j]=0x3f3f3f3f;
}
for (int i=1; i<=m; ++i)
{
f >> from >> to >> cost;
// graph[from].push_back({to,cost});
// graph[to].push_back({from,cost});
dp[from][to]=cost;
dp[to][from]=cost;
}
rf();
for (int i=1; i<=k; ++i)
{
f >> from >> to >> cost;
amenzi.push_back({from,to,cost});
}
sort(amenzi.begin(),amenzi.end(),cmp());
}
void create_dp_amenda()
{
// for (int i=1; i<=n; ++i)
// {
// for (int j=1; j<=n; ++j)
// cout << dp[i][j] <<' ';
// cout << '\n';
// }
for (int i=0; i<k; ++i)
{
if (dp[1][amenzi[i].nod]<=amenzi[i].timp)
valmax[i]=amenzi[i].cost;
for (int j=i-1; j>=0; --j)
{
if (amenzi[j].timp+dp[amenzi[j].nod][amenzi[i].nod]<=amenzi[i].timp)
{
valmax[i]=max(valmax[i],valmax[j]+amenzi[i].cost);
}
}
}
}
void solve()
{
int maxi;
for (int test=1; test<=p; ++test)
{
f >> nod >> timp;
maxi=0;
for (int i=0; i<k; ++i)
{
if (dp[nod][amenzi[i].nod]<=timp-amenzi[i].timp)
maxi=max(maxi,valmax[i]);
}
g << maxi << '\n';
}
}
int main()
{
citire();
create_dp_amenda();
solve();
return 0;
}