Pagini recente » Cod sursa (job #2837021) | Cod sursa (job #862526) | Cod sursa (job #573570) | Cod sursa (job #3243819) | Cod sursa (job #1091929)
#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];
int MAX(int a, int b)
{
if (a > b ) return a;
return b;
}
void solve ()
{
for (int t = 1; t < max_t; t ++ )
{
for (int i = 1; i <= n; i ++ )
{
for (size_t j = 0; j < v[i].size(); j ++ )
{
x = v[i][j];
t1 = t - cost[i][x];
if ( t1 < 0 )
continue;
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 = 1; i <= max_n; i ++ )
d[t][i] = -INF;
d[0][1] = 0;
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;
}