Cod sursa(job #1222878)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 24 august 2014 17:34:29
Problema PScNv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <utility>
#include <queue>
#include <bitset>

#define NMAX 250005
#define VALMAX 1005
using namespace std;

int n,s,t;
vector<pair<int,int> > graf[NMAX];

int dist[NMAX];
bitset<NMAX> viz;
queue<int> coada[VALMAX];

inline void dijkstra(){
    for(int i=1;i<=n;i++)
        dist[i]=VALMAX;

    dist[s]=0;
    coada[0].push(s);

    int y;
    vector<pair<int,int> >::iterator it;

    bool stop=false;
    for(int i=0;i<VALMAX;i++){
        while(!coada[i].empty()){
            y=coada[i].front();
            coada[i].pop();

            if(!viz[y]){
                if(y==t){
                    stop=true;
                    break;
                }

                viz[y]=1;

                for(it=graf[y].begin();it!=graf[y].end();it++)
                    if(max(dist[y],it->second)<dist[it->first]){
                        dist[it->first]=max(dist[y],it->second);
                        coada[dist[it->first]].push(it->first);
                    }
            }
        }

        if(stop)
            break;
    }
}

int main()
{
    ifstream cin("pscnv.in");
    ofstream cout("pscnv.out");

    ios_base::sync_with_stdio(false);

    int m=0,a,b,c;
    cin>>n>>m>>s>>t;

    for(int i=1;i<=m;i++){
        cin>>a>>b>>c;

        graf[a].push_back(make_pair(b,c));
    }

    dijkstra();

    cout<<dist[t]<<'\n';

    cin.close();
    cout.close();
    return 0;
}