Pagini recente » Cod sursa (job #1547315) | Cod sursa (job #2195751) | Cod sursa (job #1608067) | Cod sursa (job #554291) | Cod sursa (job #2407257)
#include<bits/stdc++.h>
using namespace std;
int n, m, k, p;
int xtr[152][4002], mx[152][4002];
int vec[152][152], cost[152][152], sz[152];
bool viz[152][4002];
int main()
{
ifstream cin("amenzi.in");
ofstream cout("amenzi.out");
cin >> n >> m >> k >> p;
for(int i = 1; i <= m; ++i)
{
int a, b, c;
cin >> a >> b >> c;
++sz[a];
++sz[b];
vec[a][sz[a]] = b, cost[a][sz[a]] = c;
vec[b][sz[b]] = a, cost[b][sz[b]] = c;
}
for(int i = 1; i <= k; ++i)
{
int a, b, c;
cin >> a >> b >> c;
xtr[a][b] += c;
}
viz[1][0] = 1;
for(int i = 0; i <= 3600; ++i)
{
if(i)
for(int j = 1; j <= n; ++j)
viz[j][i] = max(viz[j][i], viz[j][i-1]), mx[j][i] = max(mx[j][i-1], mx[j][i]);
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 = 1; q <= sz[j]; ++q)
{
int vecin = vec[j][q];
int timp = cost[j][q];
if(i+timp > 3600)
continue;
viz[vecin][i+timp] = 1;
mx[vecin][i+timp] = max(mx[vecin][i+timp], mx[j][i]);
}
}
}
for(int i = 1; i <= p; ++i)
{
int maax = -1;
int a, b, c;
cin >> a >> b;
for(int q = 1; q <= sz[a]; ++q)
{
int vecin = vec[a][q];
int timp = cost[a][q];
if(b < timp)
continue;
if(!viz[vecin][b-timp])
continue;
maax=max(maax,mx[vecin][b-timp]);
}
cout << maax << '\n';
}
return 0;
}