Cod sursa(job #1427080)

Utilizator andreiulianAndrei andreiulian Data 1 mai 2015 15:01:39
Problema Amenzi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
#include<vector>
#define pb push_back
using namespace std;
int N,M,K,P,d[3505][155],A[3505][155];
vector<int> v[155];
int C[155][155];
bool viz[3505][155];
int main()
{
	ifstream in("amenzi.in");
	ofstream out("amenzi.out");
	int i,a,b,c,t,tv,n;
	vector<int> :: iterator it;
	in>>N>>M>>K>>P;
	for(i=1;i<=M;++i)
	{
		in>>a>>b>>c;
		v[a].pb(b);
		v[b].pb(a);
		C[a][b]=C[b][a]=c;
	}
	for(i=1;i<=K;++i)
	{
		in>>a>>b>>c;
		A[b][a]+=c;
	}
	viz[0][1]=1;
	for(t=0;t<=3500;++t)
	for(n=1;n<=N;++n)
	if(viz[t][n])
	{
		for(it=v[n].begin();it!=v[n].end();++it)
		{
			tv=t+C[n][*it];
			if(tv<=3500)
			{viz[tv][*it]=1;
			d[tv][*it]=d[tv][*it]>d[t][n]+A[tv][*it]? d[tv][*it] : d[t][n]+A[tv][*it];}
			tv=t+1;
			if(tv<=3500)
			{viz[tv][*it]=1;
			d[tv][*it]=d[tv][*it]>d[t][n]+A[tv][*it]? d[tv][*it] : d[t][n]+A[tv][*it];}
		}
	}
	while(P--)
	{
		in>>a>>b;
		if(viz[b][a])
		out<<d[b][a]<<'\n';
		else out<<'-1';
	}
}