Pagini recente » Istoria paginii runda/git_gud_round10/clasament | Diferente pentru echipa-infoarena intre reviziile 68 si 69 | Monitorul de evaluare | Statistici discret (rave) | Cod sursa (job #996870)
Cod sursa(job #996870)
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
#define NMAX 151
#define TMAX 3501
#define INF 1<<30
#define Pair pair < int , int >
#define y first
#define timp second
int d[NMAX][TMAX],a[NMAX][TMAX],viz[NMAX][TMAX];
vector <Pair> v[NMAX];
int dp(int x, int t)
{
if(t<0)
return -INF;
if(viz[x][t])
return d[x][t];
for(vector <Pair> :: iterator it=v[x].begin();it!=v[x].end();it++)
d[x][t]=max(d[x][t],dp(it->y,t-(it->timp))+a[x][t]);
viz[x][t]=1;
return d[x][t];
}
int main ()
{
int n,m,k,x,yy,c,p,i,j;
ifstream f("amenzi.in");
ofstream g("amenzi.out");
f>>n>>m>>k>>p;
for(i=1;i<=m;i++) {
f>>x>>yy>>c;
v[x].push_back(make_pair(yy,c));
v[yy].push_back(make_pair(x,c));
}
for(i=1;i<=k;i++) {
f>>x>>yy>>c;
a[x][yy]=a[x][yy]+c;
}
for(i=0;i<=n;i++)
for(j=0;j<=TMAX-1;j++)
d[i][j]=-INF;
d[1][0]=0;
viz[1][0]=0;
for(i=0;i<=n;i++)
for(j=0;j<=TMAX-1;j++)
if(viz[i][j]==0)
d[i][j]=dp(i,j);
for(i=1;i<=p;i++) {
f>>x>>yy;
g<<d[x][yy]<<'\n';
}
f.close();
g.close();
return 0;
}