Pagini recente » Cod sursa (job #741743) | Cod sursa (job #971911) | Cod sursa (job #1440254) | Cod sursa (job #1014837) | Cod sursa (job #390184)
Cod sursa(job #390184)
#include <fstream>
#include <vector>
#define TMAX 3501
#define NMAX 152
#define PMAX 8012
using namespace std;
struct nod{ int c, n; };
struct sotie{ int inters, timp; };
sotie Sot[PMAX];
vector<nod> A[NMAX];
int N, M, K, P;
int D[TMAX][NMAX], AM[TMAX][NMAX];
void Citeste(void)
{
ifstream fin("amenzi.in");
int i, x, y;
nod a;
fin >>N >>M >>K >>P;
for (i = 1; i <= M; i++)
{
fin >>x >>y >>a.c;
a.n = y;
A[x].push_back(a);
a.n = x;
A[y].push_back(a);
}
for (i = 1; i <= K; i++)
{
fin >>x >>y >>a.c;
AM[y][x] += a.c;
}
for (i = 1; i <= P; i++)
fin >>Sot[i].inters >>Sot[i].timp;
fin.close();
}
void Rezolva(void)
{
int i, j, t;
for (i = 1; i <= N; i++)
D[0][i] = -1;
D[0][1] = 0;
for (t = 1; t < TMAX; t++)
for (i = 1; i <= N; i++)
{
D[t][i] = D[t-1][i];
for (j = 0; j < A[i].size(); j++)
if (t - A[i][j].c >= 0 && D[t - A[i][j].c][A[i][j].n] > D[t][i])
D[t][i] = D[t - A[i][j].c][A[i][j].n];
if (D[t][i] != -1)
D[t][i] += AM[t][i];
}
}
void Afiseaza(void)
{
ofstream fout("amenzi.out");
int i;
for (i = 1; i <= P; i++)
fout <<D[Sot[i].timp][Sot[i].inters] <<'\n';
fout.close();
}
int main()
{
Citeste();
Rezolva();
Afiseaza();
}