Cod sursa(job #786391)

Utilizator danalex97Dan H Alexandru danalex97 Data 11 septembrie 2012 12:16:10
Problema PScNv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;

#define cost first
#define nod second
priority_queue< pair<int,int> > Heap;

const int Nmax = 250010;
const int oo = 1<<30;
const int Pars = 100;

vector< pair<int,int> > Leg[Nmax];
int N,M,Start,End,Cost[Nmax];

ifstream F("pscnv.in");
ofstream G("pscnv.out");

int P; char Str[Pars];
inline int Get() 
{
	int Rez = 0;
	while (Str[P]>='0' && Str[P] <= '9') 
		Rez = Rez * 10 + Str[P++] - '0'; ++P;
	return Rez;
}

int main()
{
	F>>N>>M>>Start>>End;
	F.get();
	for (int i=1;i<=M;++i)
	{
		F.getline(Str,Pars); P=0;
		int x=Get(),y=Get(),c=Get();
		Leg[x].push_back( make_pair(c,y) );
	}
	for (int i=1;i<=N;++i) Cost[i]=oo;
	
	int Nod=Start;
	Cost[Nod]=0;
	for (vector< pair<int,int> >::iterator it=Leg[Nod].begin();it!=Leg[Nod].end();++it)
		Heap.push( make_pair( -(it->cost) , it->nod ) );
	
	while ( Cost[End]==oo )
	{
		while ( -Heap.top().cost >= Cost[Heap.top().nod] ) 
			Heap.pop();
		
		Cost[Heap.top().nod]= max( -Heap.top().cost , Cost[Nod] );
		Nod = Heap.top().nod;
		
		for (vector< pair<int,int> >::iterator it=Leg[Nod].begin();it!=Leg[Nod].end();++it)
			Heap.push(  make_pair( -(it->cost) , it->nod )  );
	}
	
	G<<Cost[End]<<'\n';
}