Cod sursa(job #2479233)

Utilizator stefantagaTaga Stefan stefantaga Data 23 octombrie 2019 16:15:55
Problema PScNv Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.55 kb
#include<fstream>
#include<stdio.h>
#include<string.h>
#include<vector>
#include<queue>
using namespace std;
FILE *fi=fopen("pscnv.in","r");
ofstream fo("pscnv.out");
int n,m,x,y,a,b,c,C[250005],i,ind,l;
vector<pair<int,int> > V[250005];
priority_queue<pair<int,int> > Q;
vector<pair<int,int> >::iterator it;
pair<int,int> val;
char S[100005];

void nextS()
{
    ind=0;
    fread(S,1,100000,fi);
    l=strlen(S);
}

int nextInt()
{
    int r=0;
    if(ind==l)
        nextS();
    while(S[ind]<'0' || S[ind]>'9')
    {
        ind++;
        if(ind==l)
            nextS();
    }
    while(S[ind]>='0' && S[ind]<='9')
    {
        r=r*10+S[ind]-'0';
        ind++;
        if(ind==l)
            nextS();
    }
    return r;
}

int main()
{
    n=nextInt();
    m=nextInt();
    x=nextInt();
    y=nextInt();
    for(i=1; i<=m; i++)
    {
        a=nextInt();
        b=nextInt();
        c=nextInt();
        V[a].push_back({b,c});
    }
    for(i=1; i<=n; i++)
        C[i]=-1;
    C[x]=0;
    Q.push({0,x});
    while(!Q.empty())
    {
        val=Q.top();
        Q.pop();
        if(C[val.second]!=-val.first)
            continue;
        for(it=V[val.second].begin(); it!=V[val.second].end(); it++)
        {
            c=max((*it).second,-val.first);
            if(C[(*it).first]==-1 || C[(*it).first]>c)
            {
                C[(*it).first]=c;
                Q.push({-c,(*it).first});
            }
        }
    }
    fo<<C[y]<<"\n";
    fclose(fi);
    fo.close();
    return 0;
}