Cod sursa(job #2671621)

Utilizator Edwuard99Diaconescu Vlad Edwuard99 Data 12 noiembrie 2020 14:23:14
Problema PScNv Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb

#include <fstream>
#include <vector>
#include <queue>
#define Nmax 250002
#define Valmax 1002
#define pb push_back
#define mp make_pair
#define y first
#define c second

using namespace std;

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

vector< pair<int,int> > G[Nmax];
queue< int > v[Valmax];
int d[Nmax];
int N,M,X,Y,vmax;

inline int Maxim(int x,int y){ return x>y ? x:y; }

void dijkstra(){
    vector< int >:: iterator it;
    vector< pair<int,int> >:: iterator it2;
    int i,wh;
    for(i=1;i<=N;++i)
        d[i]=vmax+1;
    d[X]=0;
    v[0].push(X);

    for(i=0; i<=vmax; ++i)
        while( ! v[i].empty() ){
            wh=v[i].front(); v[i].pop();
            if( wh==Y ) return;
            if( d[wh] == i ){
                for(it2=G[wh].begin(); it2!=G[wh].end(); ++it2)
                    if( d[it2->y] > Maxim(d[wh],it2->c) ){
                        d[it2->y] = Maxim(d[wh],it2->c);
                        v[d[it2->y]].push(it2->y);
                    }
            }
        }
}

int main(){
    int i,x,y,z;
    fin>>N>>M>>X>>Y;

    for(i=1;i<=M;++i){
        fin>>x>>y>>z;
        if( x!=y ){
            G[x].pb(mp(y,z));
            vmax=Maxim(vmax,z);
        }
    }

    dijkstra();

    fout<<d[Y]<<"\n";
    fin.close(); fout.close();
    return 0;
}