Cod sursa(job #751254)

Utilizator SpiriFlaviuBerbecariu Flaviu SpiriFlaviu Data 25 mai 2012 00:24:38
Problema PScNv Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#include <cctype>
#include <cstring>
#define INF 1000000000

using namespace std;

ifstream fin("pscnv.in");
ofstream fout("pscnv.out");

queue<int> q;
vector<pair<int,int> > v[250001];
int c[250001];
bool inq[250001];
char pars[5000000];
int curent=0;

inline bool compare(const pair<int,int> a, const pair<int,int> b)
{
    return a.second<b.second;
}

int getnr()
{
    int nr=0;
    while(!isdigit(pars[curent]))
        curent++;
    while(isdigit(pars[curent]))
    {
        nr=nr*10+(pars[curent]-'0');
        curent++;
    }
    return nr;
}

int main()
{

    int n=0,m=0,x,y,a,b,k;
    fin.getline(pars,sizeof(pars),'\0');
    n=getnr();
    m=getnr();
    x=getnr();
    y=getnr();
    for(int i=1;i<=n;i++)
        c[i]=INF;
    for(int i=1;i<=m;i++)
    {
        a=getnr();
        b=getnr();
        k=getnr();
        v[a].push_back(make_pair(b,k));
    }
    for(int i=1;i<n;i++)
        sort(v[i].begin(),v[i].end(),compare);
    q.push(x);
    c[x]=0;
    while(!q.empty())
    {
        int F = q.front();
        inq[F]=false;
        for(int i=0;i<v[F].size();i++)
            if(max(c[F],v[F][i].second)<c[v[F][i].first])
            {
                c[v[F][i].first]  = max(c[F],v[F][i].second);
                if(!inq[v[F][i].first])
                {
                    q.push(v[F][i].first);
                    inq[v[F][i].first]=true;
                }
            }
        q.pop();
    }
    fout<<c[y]<<'\n';
    fin.close();
    fout.close();
    return 0;
}