Pagini recente » Cod sursa (job #2397562) | Cod sursa (job #2250284) | Cod sursa (job #429137) | Cod sursa (job #1370811) | Cod sursa (job #1809740)
#include <fstream>
#include <algorithm>
#include <cstring>
#include<vector>
#include<set>
#define TMax 3500
using namespace std;
ifstream fin("amenzi.in");
ofstream fout("amenzi.out");
int componente,i,aux,n,k,j,p,s,unu,t,m,doi,x,q,st,dr,timp,y;
int nod, sum;
vector <pair<int,int> > v[159];
int a[159][3509];
//a[i][j] = suma amenzilor care se dau la intersectia i la timpul j
int d[159][3509];
//d[i][j] = profitul maxim pentru a fi la intersectia i la timpul j
void solve()
{
int i, j, q;
memset(d, -1, sizeof(d));
d[1][0] = 0;
for(i = 1; i <= n; i++)
{
for(j = 1; j <= TMax;j++)
{
// fout << d[i][j] <<" ";
}
//fout << "\n";
}
for(i = 0; i < v[1].size(); i++)
{
//d[v[1][i].first][v[1][i].second] = max(a[v[1][i].first][v[1][i].second], 0);
}
for(i = 1; i <= TMax; i++)
{
for(j = 1; j <= n; j++)
{
for(q = 0; q < v[j].size(); q++)
{
if(i - v[j][q].second >= 0)
{
//fout<<"ok\n";
d[j][i] = max(d[j][i], d[v[j][q].first][i - v[j][q].second] );
}
}
if(d[j][i] >= 0)
{
d[j][i] += a[j][i];
}
}
}
}
int main()
{
fin >> n >> m >> k >> p;
for(i = 1; i <= m; i++)
{
fin >> x >> y >> timp;
v[x].push_back(make_pair(y, timp));
v[y].push_back(make_pair(x, timp));
}
for(i = 1; i <= n; i++)
{
//tratam cazul cand asteapta 1 unitate de timp
v[i].push_back(make_pair(i, 1));
}
for(i = 1; i <= k; i++)
{
fin >> nod >> timp >> sum;
a[nod][timp] += sum;
}
solve();
for(i = 1; i <= 1; i++)
{
for(j = 1; j <= TMax;j++)
{
//fout << d[i][j] <<" ";
}
//fout << "\n";
}
for(i = 1; i <= p; i++)
{
fin >> nod >> timp;
fout << d[nod][timp] <<" \n";
}
}