Cod sursa(job #2521697)

Utilizator NashikAndrei Feodorov Nashik Data 11 ianuarie 2020 12:52:54
Problema PScNv Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <cstdio>
#include <fstream>
#include <queue>
using namespace std;
bool ok;
int x,y,n,m,sol;
vector<pair<int,int> > v[500005];
bool f[250005];
void dfs(int nod,int k){
    if(ok==1)
        return;
    if(nod==y){
        ok=1;
        return;
    }
    for(int i=0;i<v[nod].size();i++){
        if(ok==1)
            return;
        if(v[nod][i].second<=k and f[v[nod][i].first]==0){
            f[v[nod][i].first]=1;
            dfs(v[nod][i].first,k);
        }
    }
}
bool verif(int lim){
    ok=0;
    for(int i=1;i<=n;i++){
        f[i]=0;
    }
    dfs(x,lim);
    if(ok==1){
        return true;
    }
    return false;
}
void cautbin(int st,int dr){
    if(st>dr)
        return;
    int mid=(st+dr)>>1;
    if(verif(mid)==true){
        sol=mid;
        cautbin(st,mid-1);
    }
    else{
        cautbin(mid+1,dr);
    }
}
int main()
{
    //ifstream cin("pscnv.in");
    //ofstream cout("pscnv.out");
    freopen("pscnv.in","r",stdin);
    freopen("pscnv.out","w",stdout);
    int a,b,c;
    //cin>>n>>m>>x>>y;
    scanf("%d%d%d%d",&n,&m,&x,&y);
    for(int i=1;i<=m;i++){
        //cin>>a>>b>>c;
        scanf("%d%d%d",&a,&b,&c);
        v[a].push_back(make_pair(b,c));
    }
    cautbin(1,1000);
    //cout<<sol;
    printf("%d",sol);
    return 0;
}