Cod sursa(job #766187)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 10 iulie 2012 15:45:51
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

int N,M,K,P,A[3510][160];
int nod[2][2000],cost[2000];
int v[3510][160];
int main()
{
	ifstream in("amenzi.in");
	ofstream out("amenzi.out");
	
	in>>N>>M>>K>>P;
	for(int i=1;i<=M;++i)
	{
		in>>nod[0][i]>>nod[1][i]>>cost[i];
	}
	for(int i=M+1;i<=N+M;++i)
	{
		nod[0][i]=nod[1][i]=i-M;
		cost[i]=1;
	}
	M=N+M;
	
	for(int i=1;i<=K;++i)
	{
		int a,b,c;
		in>>a>>b>>c;
		v[b][a]+=c;
	}
	
	for(int i=0;i<=3501;++i)
	{
		for(int j=1;j<=N;++j)
		{
			A[i][j]=-1;
		}
	}
	
	A[0][1]=0;
	
	for(int i=0;i<=3501;++i)
	{
		for(int j=1;j<=M;++j)
		{
			for(int k=0;k<=1;++k)
			{
				if(i-cost[j]>=0 && A[i-cost[j]][nod[!k][j]]!=-1)
				{
					A[i][nod[k][j]]=max(A[i][nod[k][j]],A[i-cost[j]][nod[!k][j]]);
				}
			}
		}
		for(int j=1;j<=N;++j)
		{
			if(A[i][j]>=0) A[i][j]+=v[i][j];
		}
	}
	
	for(int i=1;i<=P;++i)
	{
		int a,b;
		in>>a>>b;
		out<<A[b][a]<<'\n';
	}
	
	out.close();
	return 0;
}