Pagini recente » Cod sursa (job #3143109) | Cod sursa (job #2665978) | Cod sursa (job #2971084) | Cod sursa (job #949768) | Cod sursa (job #1091476)
#include <stdio.h>
#include <vector>
#define max_t 3505
#define max_n 155
#define INF 0x3f3f3f3f
using namespace std;
int d[max_t][max_n], cost[max_n][max_n], amenzi[max_t][max_n];
int n, m, k, p, a, b, c, x, t1;
vector <int> v[max_n];
void solve ()
{
for (int t = 1; t < max_t; t ++ )
{
for (int i = 1; i <= n; i ++ )
{
for (int j = 0; j < v[i].size(); j ++ )
{
x = v[i][j];
t1 = t - cost[i][x];
if ( t1 > 0 )
{
d[t][i] = max (d[t][i], d[t1][x]);
}
}
d[t][i] = max (d[t][i], d[t-1][i]);
if ( d[t][i] != -INF )
d[t][i] += amenzi[t][i];
}
}
}
void read_write ()
{
FILE *fis = fopen ("amenzi.in", "r");
FILE *fis2 = fopen ("amenzi.out", "w");
fscanf(fis, "%d %d %d %d", &n, &m, &k, &p);
for (int i = 1; i <= m; i ++ )
{
fscanf(fis, "%d %d %d", &a, &b, &c);
cost[a][b] = cost[b][a] = c;
v[a].push_back(b), v[b].push_back(a);
}
for (int i = 1; i <= k; i ++ )
{
fscanf(fis, "%d %d %d", &a, &b, &c);
amenzi[b][a] += c;
}
for (int t = 0; t <= max_t; t ++ )
for ( int i = 0; i <= max_n; i ++ )
d[t][i] = -INF;
solve();
for ( int i = 1; i <= p; i ++ )
{
fscanf(fis, "%d %d", &a, &b);
if ( d[b][a] != -INF )
fprintf(fis2, "%d\n", d[b][a]);
else
fprintf(fis2, "0\n");
}
fclose(fis);
fclose(fis2);
}
int main()
{
read_write();
return 0;
}