Cod sursa(job #739701)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 23 aprilie 2012 18:42:50
Problema PScNv Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

int n,m,x,y,mx,vl;
short ap[250100];
vector< pair<int,short> > A[250100];
queue<int> Q;

inline bool check(int val)
{
    ++vl;
    for(;!Q.empty();Q.pop());

    Q.push(x);
    for(;!Q.empty();Q.pop())
    {
        int ret=Q.front();
        for(vector< pair<int,short> >::iterator it=A[ret].begin();it!=A[ret].end();++it)
        {
            if(it->second<=val && ap[it->first]<vl)
            {
                Q.push(it->first);
                ap[it->first]=vl;
                if(it->first==y) return true;
            }
        }
    }
    return false;
}

inline int bs()
{
    int i=mx,cnt=1<<9;
    for(i=1000;cnt>0;cnt>>=1)
    {
        if(i-cnt>0)
        {
            if(check(i-cnt))
            {
                i-=cnt;
            }
        }
    }
    return i;
}
int main()
{
    ifstream in("pscnv.in");
    ofstream out("pscnv.out");

    int x1,y1,c;
    in>>n>>m>>x>>y;
    for(int i=1;i<=m;++i)
    {
        in>>x1>>y1>>c;
        if(mx<c)
        {
            mx=c;
        }
        A[x1].push_back(make_pair(y1,c));
        A[y1].push_back(make_pair(x1,c));
    }

    out<<bs();
    out<<'\n';
    out.close();
    return 0;
}