Cod sursa(job #1338)

Utilizator testTest User test Data 13 decembrie 2006 13:08:16
Problema PScNv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#include <vector>

using namespace std;

const int MAXN = 250001;

int N, M, d[MAXN], S, D;
vector<int> cst[1001];
vector< pair<int, int> > con[MAXN];

int main()
{
	freopen("pscnv.in", "rt", stdin);
	freopen("pscnv.out", "wt", stdout);
	int i, j, k;
	for (scanf("%d %d %d %d", &N, &M, &S, &D); M; M--)
		scanf("%d %d %d", &i, &j, &k),
		con[i].push_back( make_pair(j, k) );
	memset(d, 0x3f, sizeof(d));
	d[S] = 0;
	cst[0].push_back(S);
	vector< pair<int, int> > :: iterator it;
	for (i = 0; i <= 1000; i++)
		for (j = 0; j < cst[i].size(); j++)
		{
			k = cst[i][j];
			if (d[k] != i) continue;
			for (it = con[k].begin(); it != con[k].end(); it++)
				if ((*it).second > i)
					if ((*it).second < d[(*it).first])
						cst[(*it).second].push_back((*it).first),
						d[(*it).first] = (*it).second;
					else;
				else
					if (i < d[(*it).first])
						cst[i].push_back((*it).first),
						d[(*it).first] = i;					
		}
	printf("%d\n", d[D]);		
	return 0;
}