Cod sursa(job #425741)

Utilizator otilia_sOtilia Stretcu otilia_s Data 26 martie 2010 00:14:28
Problema Amenzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <vector>
using namespace std;
#define NMAX 154
#define TMAX 3504
#define s second
#define f first
bool viz[TMAX][NMAX];
int C[TMAX][NMAX],Am[TMAX][NMAX];
vector < pair<short,int> > A[NMAX];

int main()
{
    freopen("amenzi.in","r",stdin);
	int n,m,k,P,i,t;
	scanf("%d %d %d %d",&n,&m,&k,&P);
	for (i=1;i<=m;++i)
	{ int x,y,ct;
		scanf("%d %d %d",&x,&y,&ct);
		A[x].push_back(make_pair(y,ct));
		A[y].push_back(make_pair(x,ct));
	}
	for (i=1;i<=k;++i) 
	{ int x,y,c;
		scanf("%d %d %d",&x,&y,&c);
		Am[y][x]+=c;
	}
	
	memset(viz,0,sizeof(viz));
	unsigned j;
	C[0][1]=Am[0][1]; viz[0][1]=1;
	
	for (t=1;t<=3500;++t)
	 for (i=1;i<=n;++i)
	  {
		if (viz[t-1][i]) {viz[t][i]=1;               
						  C[t][i]=C[t-1][i];
						 }	
		for (j=0;j<A[i].size();++j)
		 if (t>=A[i][j].s)
		  if (viz[t-A[i][j].s][A[i][j].f])		   
		   {
			viz[t][i]=1;
			if (C[t-A[i][j].s][A[i][j].f]>C[t][i])
				C[t][i]=C[t-A[i][j].s][A[i][j].f];
		   }
		  
		if (viz[t][i]) C[t][i]+=Am[t][i];
	  }
	
	  freopen("amenzi.out","w",stdout);
	  for (i=1;i<=P;++i)
	  { int x,y;
		scanf("%d %d",&x,&y);
		if (!viz[y][x]) printf("-1\n");
		   else	printf("%d\n",C[y][x]);
	  }
	return 0;
}