Cod sursa(job #2680203)

Utilizator stefan.popescuPopescu Stefan stefan.popescu Data 2 decembrie 2020 22:22:52
Problema PScNv Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <bitset>
using namespace std;
ifstream in ("pscnv.in");
ofstream out("pscnv.out");
const int nmax=25e4;
vector <pair<int, int> > muchii[nmax+2];
bitset <nmax+2> bt;
int n, m;
int x, y, z, ss, ff;
int coada[nmax+2];
bool check(int val){
    int st=0, dr=1;
    bt.reset();
    bt.set(ss);
    coada[++st]=ss;
    while(st<=dr){
        int elem=coada[st++];
        for(auto &x:muchii[elem])
            if(!bt.test(x.first))
                if(x.second<=val){
                    coada[++dr]=x.first;
                    bt.set(x.first);
                }
    }
    return bt.test(ff);
}
int main()
{
    in>>n>>m>>ss>>ff;
    for(int i=1; i<=m; i++){
        in>>x>>y>>z;
        muchii[x].push_back({y, z});
        muchii[y].push_back({x, z});
    }
    int st=1, dr=1000, ans=-1;
    while(st<=dr){
        int mij=(st+dr)/2;
        if(check(mij))
            ans=mij, dr=mij-1;
        else
            st=mij+1;
    }
    out<<ans;
    return 0;
}