Pagini recente » Cod sursa (job #2506980) | Cod sursa (job #1507632) | Cod sursa (job #2932268) | Cod sursa (job #3515) | Cod sursa (job #1197585)
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#define PII pair<int, int>
#define x first
#define y second
#define mp make_pair
using namespace std;
const int N=250005, M=1001, INF=0x3f3f3f3f;
vector <PII> G[N];
vector <int> C[M];
int dist[N];
int n, start, finish;
void Solve()
{
int i, x;
memset(dist, INF, sizeof(dist));
dist[start]=0;
C[0].push_back(start);
for(i=0;i<M;i++)
{
for(size_t j=0;j<C[i].size();j++)
{
x=C[i][j];
if(dist[x]!=i) continue;
if(x==finish)
{
printf("%d\n", dist[x]);
return;
}
for(auto p: G[x])
{
if(max(i, p.y)<dist[p.x])
{
dist[p.x]=max(i, p.y);
C[max(i, p.y)].push_back(p.x);
}
}
}
C[i].clear();
}
}
int main()
{
freopen("pscnv.in", "r", stdin);
freopen("pscnv.out", "w", stdout);
int m, x, y, z;
char cit[30], *p;
scanf("%d %d %d %d\n", &n, &m, &start, &finish);
while(m--)
{
x=y=z=0;
fgets(cit, 30, stdin);
for(p=cit;*p>='0'&&*p<='9';p++) x=10*x+*p-'0'; p++;
for(;*p>='0'&&*p<='9';p++) y=10*y+*p-'0'; p++;
for(;*p>='0'&&*p<='9';p++) z=10*z+*p-'0';
G[x].push_back(mp(y, z));
}
Solve();
}