Cod sursa(job #1281864)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 3 decembrie 2014 20:03:31
Problema PScNv Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include<fstream>
#include<iostream>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
ifstream in("pscnv.in");
ofstream out("pscnv.out");
const int NMAX = 250009;
const int INF = 1 << 30;

vector< pair<int,int> > v[NMAX];
queue< int > coada;
int n,m,sol[NMAX],x,y,viz[NMAX],lungime;
char s[1000000];

int citire(int& poz)
{

    while(poz <= lungime && !isdigit(s[poz]))
        poz++;
    int num = 0;
    while(s[poz] <= '9' && s[poz] >= '0')
    {
        num = num*10 + (s[poz]-48);
        poz++;
    }
    return num;
}

void read()
{
    in>>n>>m>>x>>y;
    int j = 0;
    in.get(s,1000000,'\0');
    lungime = strlen(s);
    int a ,b,c;
    for(int i = 1 ; i <= m ; i++){
        a = citire(j);
            j++;
        b = citire(j);
            j++;
        c = citire(j);
        v[a].push_back(make_pair(b,c));
    }
    in.close();
    for(int i = 1 ; i <= n ; i++)
        if(i != x)
            sol[i] = INF;

}

int bmf(int start)
{

    sol[start] = 0;
    coada.push(start);
    viz[start] = 1;
    int i,k,vecin;
    while( !coada.empty() )
    {

        k = coada.front();
        viz[k] = 0;
        for(i = 0 ; i < v[k].size() ; i++){

            vecin = v[k][i].first;
            if(sol[vecin] > max(v[k][i].second,sol[k])){
                sol[vecin] = max(v[k][i].second,sol[k]);
                if(!viz[vecin]){
                    coada.push(vecin);
                    viz[vecin] = 1;
                }
            }
        }
        coada.pop();
    }
    return sol[y];
}

int main()
{

    read();
    out<<bmf(x);
    return 0;
}