Cod sursa(job #791502)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 24 septembrie 2012 13:34:56
Problema Amenzi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<fstream>
#include<vector>
#include<cmath>
using namespace std;
int n,m,K,Q;
vector < pair<int,int> > G[160];
int best[160][3510],amenda[160][3510];

int main()
{
	int i,j,k,x,y,c;
	ifstream fin("amenzi.in");
	ofstream fout("amenzi.out");
	fin>>n>>m>>K>>Q;
	for(i=1;i<=m;i++)
	{
		fin>>x>>y>>c;
		G[x].push_back(make_pair(y,c));
		G[y].push_back(make_pair(x,c));
	}
	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<=3505;i++)
	{
		for(j=1;j<=n;j++)
		{
			best[j][i]=-1;
			for(k=G[j].size()-1;k>=0;k--)
			{
				x=G[j][k].first;
				c=G[j][k].second;
				if(i>=c)
					best[j][i]=max(best[j][i],best[x][i-c]);
			}
			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;
}