Cod sursa(job #174064)

Utilizator crawlerPuni Andrei Paul crawler Data 8 aprilie 2008 14:06:56
Problema PScNv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <cstdio>
#include <vector>
#include <bitset>
#include <algorithm>

using namespace std;

#define pb push_back
#define mk make_pair
#define fs first
#define sd second
#define Nmax 250006

vector< pair<int,int> > l[Nmax];
vector<int> best[Nmax];
bitset<Nmax> v;
int n,m,x,y;

#define Dim 10000
#define buff fread(buf,1,Dim,stdin), poz=0
int poz;
char buf[Dim];
inline int cit()
{
       int ret=0;
       while (buf[poz] < 48) if (++poz == Dim) buff;
       while (buf[poz] > 47)
       {
             ret = ret*10 + buf[poz] - 48;
             if (++poz == Dim) buff;
       }       
       return ret;
}

int main()
{
    freopen("pscnv.in","r",stdin);
    freopen("pscnv.out","w",stdout);
    
    buff;
    n=cit();m=cit();x=cit();y=cit();
    
    int A,B,C;
    
    for (int i=1;i<=m;++i)
    {
        A=cit();B=cit();C=cit();
        l[A].pb(mk(B,C));
        l[B].pb(mk(A,C));    
    }
    
    best[0].pb(x);
    
    for (int i=0;i<=1000;++i)
    {     
        for (int j=0;j<best[i].size();++j)    
        {
            v[best[i][j]] = 1;
            if (best[i][j] == y)
            {
               printf("%d\n", i);
               return 0;               
            }
            for (unsigned int k=0;k<l[best[i][j]].size();++k) if (v[l[best[i][j]][k].fs]==0)
            best[max(i,l[best[i][j]][k].sd)].pb(l[best[i][j]][k].fs);    
        }
    }   
    
    return 0;    
}