Cod sursa(job #1284643)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 6 decembrie 2014 18:10:16
Problema PScNv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
const int NMAX = 250009;
const int INF = 1 << 30;

vector< pair<int,int> > v[NMAX];
queue<int> coada[1001];
int n,m,sol[NMAX],x,y,viz[NMAX],lungime,kmax = -1;

void read()
{
    freopen("pscnv.in","r",stdin);
    scanf("%d%d%d%d",&n,&m,&x,&y);
    int a ,b,c;
    char sir[30],*p;
    fgets(sir,3,stdin);
    for(int i = 1 ; i <= m ; i++){
        fgets(sir,30,stdin);
        a = b = c = 0;
        for(p = sir ; *p <= '9' && *p >= '0' ; p++) a= a*10 + (*p-48);
        p++;
        for(; *p <= '9' && *p >= '0' ; p++) b= b*10 + (*p-48);
        p++;
        for(; *p <= '9' && *p >= '0' ; p++) c= c*10 + (*p-48);
        kmax = max(kmax,c);
        v[a].push_back(make_pair(b,c));
    }
    for(int i = 1 ; i <= n ; i++)
        if(i != x)
            sol[i] = INF;

}

int bmf(int start)
{

    int k;
    coada[0].push(start);
    for(int i = 0 ; i <= kmax ; i++){
        while(!coada[i].empty()){
            k = coada[i].front();
            coada[i].pop();
            for(int j = 0 ; j < v[k].size() ; j++){
                if(sol[v[k][j].first] > max(sol[k],v[k][j].second)){
                    sol[v[k][j].first] = max(sol[k],v[k][j].second);
                    coada[sol[v[k][j].first]].push(v[k][j].first);
                }
            }
        }
    }
    return sol[y];
}

int main()
{
    freopen("pscnv.out","w",stdout);
    read();
    printf("%d",bmf(x));
    return 0;
}