Cod sursa(job #1142695)

Utilizator classiusCobuz Andrei classius Data 14 martie 2014 08:25:16
Problema PScNv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
using namespace std;

#include<fstream>
#include<vector>
#include<utility>
#include<map>
#include<cstring>
#include<queue>

ifstream cin("pscnv.in");
ofstream cout("pscnv.out");

const int MAXN=300000;
vector<pair<int,int> > v[MAXN];
bool ok[MAXN];

int main(){

    int n,m,x,y;

    cin>>n>>m>>x>>y;
    cin.ignore();

    for(int i=1;i<=m;i++){
        int x,y,ps;
        char a[100];
        x=y=ps=0;

        cin.getline(a,100);

        unsigned j=0;

        while(a[j]!=' '){
            x=x*10+a[j]-'0';
            j++;
        }
        j++;
        while(a[j]!=' '){
            y=y*10+a[j]-'0';
            j++;
        }
        j++;
        while(j<strlen(a)){
            ps=ps*10+a[j]-'0';
            j++;
        }

        if(x==y){
            continue;
        }

        v[x].push_back(make_pair(y,ps));
    }

    int lf=0,rt=1000;

    while(lf<rt){
        int mid=(lf+rt)/2;
        memset(ok,0,sizeof(ok));
        queue<int> q;

        ok[x]=1;
        q.push(x);

        while(!q.empty()){
            int i=q.front();
            q.pop();

            for(unsigned j=0;j<v[i].size();j++){
                int u=v[i][j].first;
                int cs=v[i][j].second;

                if(!ok[u] && mid>=cs){
                    ok[u]=1;
                    q.push(u);
                }
            }

            if(ok[y]){
                break;
            }
        }

        if(ok[y]){
            rt=mid;
        }else{
            lf=mid+1;
        }
    }

    cout<<lf;

    return 0;
}