Pagini recente » Cod sursa (job #856614) | Cod sursa (job #1032291) | Cod sursa (job #892344) | Cod sursa (job #1910010) | Cod sursa (job #129159)
Cod sursa(job #129159)
using namespace std;
#include<cstdio>
#include<list>
#define Nm 250001
#define Km 1001
#define max(a,b) ((a)>(b)?(a):(b))
list< pair<int,int> > G[Nm];
list<int> L[Km];
int Dm[Nm],n,x0,y0;
void read()
{
char S[19];
int m,x,y,k,i;
pair<int,int> p;
freopen("pscnv.in","r",stdin);
scanf("%d%d%d%d\n",&n,&m,&x0,&y0);
while(m--)
{
gets(S);
x=y=k=0;
for(i=0;S[i]!=' ';++i)
x=x*10+S[i]-'0';
for(++i;S[i]!=' ';++i)
y=y*10+S[i]-'0';
for(++i;S[i];++i)
k=k*10+S[i]-'0';
p.first=y;
p.second=k;
G[x].push_back(p);
}
}
void solve()
{
int i,x,d;
list< pair<int,int> >::iterator it;
for(i=1;i<=n;++i)
Dm[i]=Km;
Dm[x0]=0;
L[0].push_back(x0);
i=0;
while(1)
{
if(L[i].empty())
{
++i;
continue;
}
x=L[i].front();
if(x==y0)
break;
if(Dm[x]<i)
{
L[i].pop_front();
continue;
}
for(it=G[x].begin();it!=G[x].end();++it)
{
d=max(i,(*it).second);
if(d<Dm[(*it).first])
{
Dm[(*it).first]=d;
L[d].push_back((*it).first);
}
}
L[i].pop_front();
}
}
void write()
{
freopen("pscnv.out","w",stdout);
printf("%d\n",Dm[y0]);
}
int main()
{
read();
solve();
write();
return 0;
}