Pagini recente » Cod sursa (job #85699) | Cod sursa (job #2678789) | Cod sursa (job #2625310) | Cod sursa (job #3179606) | Cod sursa (job #185674)
Cod sursa(job #185674)
#include <stdio.h>
#define NM 250001
int n, m;
int i, j, k, h, s, t;
int d[NM];
struct nod {
int vf, c;
nod* urm;
} *l[NM];
struct lst {
int vf;
lst* urm;
} *c[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, &m, &s, &t);
for ( k = 1; k <= m; k++ )
{
scanf("%d %d %d", &i, &j, &h);
if ( i == j ) continue;
Add(i, j, h);
Add(j, i, h);
}
for ( i = 1; i <= n; d[i] = 2000, i++ );
d[s] = 0; AddC(0, s);
for ( k = 0; k <= 1000; k++ )
for ( lst* q = c[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 = c[i];
c[i] = q;
}