Pagini recente » Cod sursa (job #2319057) | Cod sursa (job #1200186) | Cod sursa (job #2159130) | Cod sursa (job #411516) | Cod sursa (job #786394)
Cod sursa(job #786394)
#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],Used[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)
if ( -(it->cost) < Cost[it->nod] )
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)
if ( -(it->cost) < Cost[it->nod] )
Heap.push( make_pair( -(it->cost) , it->nod ) );
}
G<<Cost[End]<<'\n';
}