Cod sursa(job #1045573)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 1 decembrie 2013 19:00:31
Problema PScNv Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#include <vector>
#include <queue>
#define Lg 15000000
#define verf ++poz==Lg? fin.read(Buffer, Lg), poz=0:0

using namespace std;
ifstream fin("pscnv.in");

int N,X,Y,sol[250005],poz;
bool viz[250005];
char Buffer[Lg];

struct Arc
{
    int y,cost;
};
vector <Arc> L[250005];
queue <int> Q;

inline void Citeste(int &x)
{
    for(; Buffer[poz]<'0' || Buffer[poz]>'9'; verf);
    for(x=0; Buffer[poz]>='0' && Buffer[poz]<='9'; x=x*10+Buffer[poz]-'0', verf);
}

inline void Read()
{
    Arc w;
    int x,M,i;
    Citeste(N); Citeste(M); Citeste(X); Citeste(Y);
    for(i=1;i<=M;++i)
    {
        Citeste(x); Citeste(w.y); Citeste(w.cost);
        L[x].push_back(w);
    }
    fin.close();
}

inline void Bfs(int start)
{
    int nod,i,j,len,maxim;
    viz[start]=true;
    Q.push(start);
    while(!Q.empty())
    {
        nod=Q.front(); Q.pop();
        len=L[nod].size();
        for(i=0;i<len;++i)
        {
            j=L[nod][i].y; maxim=max(sol[nod],L[nod][i].cost);
            if(!viz[j] || sol[j]>maxim)
            {
                sol[j]=maxim;
                viz[j]=true;
                Q.push(j);
            }
        }
    }
    ofstream fout("pscnv.out");
    fout<<sol[Y]<<"\n";
    fout.close();
}

int main()
{
    Read();
    Bfs(X);
    return 0;
}