Pagini recente » Cod sursa (job #2695626) | Cod sursa (job #2631527) | Cod sursa (job #1474286) | Borderou de evaluare (job #1080147) | Cod sursa (job #786383)
Cod sursa(job #786383)
#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( *it );
while ( Cost[End]==oo )
{
while ( Heap.top().cost >= Cost[Heap.top().nod] )
Heap.pop();
Cost[Heap.top().nod]= Heap.top().cost;
Nod = Heap.top().nod;
for (vector< pair<int,int> >::iterator it=Leg[Nod].begin();it!=Leg[Nod].end();++it)
Heap.push( *it );
}
G<<Cost[End]<<'\n';
}