Cod sursa(job #996870)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 12 septembrie 2013 20:19:29
Problema Amenzi Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#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;
}