Cod sursa(job #996878)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 12 septembrie 2013 20:36:15
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 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[TMAX][NMAX],a[NMAX][TMAX];
vector <Pair> v[NMAX];

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<=TMAX-1;i++)
		for(j=2;j<=n;j++)
			d[i][j]=-INF;
	for(i=1;i<=TMAX-1;i++)
		for(j=1;j<=n;j++) {
			d[i][j]=d[i-1][j];
			for(vector <Pair> :: iterator it=v[j].begin();it!=v[j].end();it++)
				if(i-it->timp>=0)
					d[i][j]=max(d[i][j],d[i-it->timp][it->y]);
			if(d[i][j]!=-INF)
				d[i][j]=d[i][j]+a[j][i];
		}
	for(i=1;i<=p;i++) {
		f>>x>>yy;
		g<<d[yy][x]<<'\n';
	}
	f.close();
	g.close();
	return 0;
}