Cod sursa(job #379250)

Utilizator Mishu91Andrei Misarca Mishu91 Data 31 decembrie 2009 11:39:50
Problema PScNv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <vector>

using namespace std;

#define MAX_N 250005
#define MAX_K 1005
#define INF 0x3f3f3f3f

#define nod first
#define val second

#define foreach(V) for(typeof (V).begin() it = (V).begin(); it != (V).end(); ++it)

ifstream fin ("pscnv.in");
ofstream fout ("pscnv.out");

int N, M, S, F;
vector <pair<int, int> > G[MAX_N];
vector <int> Dst[MAX_K];

void citire()
{
	fin >> N >> M >> S >> F;

	for(int i = 1; i <= M; ++i)
	{
		int x, y, c;
		fin >> x >> y >> c;

		G[x].push_back(make_pair(y, c));
	}
}

void solve()
{
	int D[MAX_N];
	memset(D, INF, sizeof D);

	D[S] = 0;
	Dst[0].push_back(S);

	for(int i = 0; i <= 1000; ++i)
		for(int k = 0; k < (int)Dst[i].size(); ++k)
		{
			int j = Dst[i][k];
			if(D[j] == i)
				foreach(G[j])	
					if(D[it -> nod] > max(i, it -> val))
					{
						Dst[max(i, it -> val)].push_back(it -> nod);
						D[it -> nod] = max(i, it -> val);
					}
		}

	fout << D[F];
}

int main()
{
	citire();
	solve();
}