Pagini recente » Cod sursa (job #623262) | Cod sursa (job #2708183) | Cod sursa (job #2144127) | Cod sursa (job #621155) | Cod sursa (job #2671622)
#include <cstdio>
#define NM 250001
using namespace std;
int n, m;
int i, j, k, h, s, t;
int d[NM], x, y, z;
char buf[40];
struct nod {
int vf, c;
nod* urm;
} *l[NM];
struct lst {
int vf;
lst* urm;
} *cs[1001], *ct[1001];
void Add(int i, int j, int c);
void AddC(int i, int j);
int main()
{
freopen("pscnv.in", "r", stdin);
freopen("pscnv.out", "w", stdout);
scanf("%d %d %d %d\n", &n, &m, &s, &t);
for ( k = 1; k <= m; k++ )
{
fgets(buf, 40, stdin);
x = y = z = 0;
for (i = 0; buf[i] >= '0' && buf[i] <= '9'; x = x * 10 + (buf[i] - '0'), ++i);
for (i += 1; buf[i] >= '0' && buf[i] <= '9'; y = y * 10 + (buf[i] - '0'), ++i);
for (i += 1; buf[i] >= '0' && buf[i] <= '9'; z = z * 10 + (buf[i] - '0'), ++i);
if ( x == y ) continue;
Add(x, y, z);
}
for ( i = 1; i <= n; d[i] = 2000, i++ );
d[s] = 0; AddC(0, s);
for ( k = 0; k <= 1000; k++ )
for ( lst* q = cs[k]; q; q = q->urm )
if ( d[q->vf] == k )
{
i = q->vf;
for ( nod* r = l[i]; r; r = r->urm )
{
j = d[i] > r->c ? d[i] : r->c;
if ( d[r->vf] > j ) d[r->vf] = j, AddC(d[r->vf], r->vf);
}
}
printf("%d\n", d[t]);
return 0;
}
void Add(int i, int j, int c)
{
nod* q = new nod;
q->vf = j;
q->c = c;
q->urm = l[i];
l[i] = q;
}
void AddC(int i, int j)
{
lst* q = new lst;
q->vf = j;
q->urm = 0;
if ( cs[i] == 0 )
cs[i] = ct[i] = q;
else
ct[i]->urm = q, ct[i] = q;
}