Cod sursa(job #791499)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 24 septembrie 2012 13:29:12
Problema Amenzi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<fstream>
#include<vector>
#include<cmath>
using namespace std;
int n,m,K,Q;
struct Muchie{int nod,timp;};
vector <Muchie> G[160];
int best[160][3510],amenda[160][3510];

int main()
{
	int i,j,x,y,c;
	Muchie aux;
	vector <Muchie>::iterator it;
	ifstream fin("amenzi.in");
	ofstream fout("amenzi.out");
	fin>>n>>m>>K>>Q;
	for(i=1;i<=m;i++)
	{
		fin>>x>>y>>c;
		aux.nod=y;
		aux.timp=c;
		G[x].push_back(aux);
		aux.nod=x;
		G[y].push_back(aux);
	}
	for(i=1;i<=K;i++)
	{
		fin>>x>>y>>c;
		amenda[x][y]+=c;
	}
	for(i=1;i<=n;i++)
		best[i][0]=-1;
	best[1][0]=amenda[1][0];
	for(i=1;i<=3500;i++)
	{
		for(j=1;j<=n;j++)
		{
			best[j][i]=-1;
			for(it=G[j].begin();it!=G[j].end();it++)
			{
				aux=*it;
				if(i>=aux.timp)
					best[j][i]=max(best[j][i],best[aux.nod][i-aux.timp]);
			}
			best[j][i]=max(best[j][i],best[j][i-1]);
			if(best[j][i]>=0)
				best[j][i]+=amenda[j][i];
		}
	}
	for(i=1;i<=Q;i++)
	{
		fin>>x>>y;
		fout<<best[x][y]<<"\n";
	}
	fin.close();
	fout.close();
	return 0;
}