Pagini recente » Cod sursa (job #2904038) | Cod sursa (job #509958) | Cod sursa (job #578044) | Cod sursa (job #1696804) | Cod sursa (job #174064)
Cod sursa(job #174064)
#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;
}