Pagini recente » Cod sursa (job #950797) | Cod sursa (job #289401) | Cod sursa (job #2172730) | Cod sursa (job #1651466) | Cod sursa (job #290177)
Cod sursa(job #290177)
# include <stdio.h>
# define FIN "pscnv.in"
# define FOUT "pscnv.out"
# define MAX_N 250001
# define MAX_L 1001
struct graf
{
long info; long cost;
graf * next;
};
struct lista
{
long info;
lista *next;
};
long d[MAX_N];
graf *v[MAX_N],*p;
lista *l[MAX_L];
lista *sf[MAX_L],*q;
long n,m,ns,nf,i,j,k;
void qin(long vl, long ind)
{
lista *p;
p=new lista;
p->info=vl;
p->next=NULL;
if (l[ind]==NULL)
{
l[ind]=p;
sf[ind]=l[ind];
return ;
}
sf[ind]->next=p;
sf[ind]=p;
}
void solve()
{
for (i = 0; i <= 1000; i++)
{
q=l[i];
while (q!=NULL)
{
if (d[q->info]==i)
{
p=v[q->info];
while (p!=NULL)
{
if (d[q->info]>p->cost && d[p->info]>d[q->info])
{
qin(p->info,d[q->info]);
d[p->info] = d[q->info];
}
if (p->cost>=d[q->info] && d[p->info]>p->cost)
{
qin(p->info,p->cost);
d[p->info] = p->cost;
}
p=p->next;
}
}
q=q->next;
}
}
}
int main()
{
freopen(FIN , "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%ld %ld %ld %ld",&n,&m,&ns,&nf);
long tr;
for (tr = 1; tr <= m; tr++)
{
scanf("%ld %ld %ld",&i,&j,&k);
p=new graf;
p->info=j;
p->cost=k;
p->next=v[i];
v[i]=p;
}
for (i = 1; i <= n; i++)
d[i]=MAX_L;
d[ns]=0;
qin(ns,0);
solve();
printf("%ld",d[nf]);
return 0;
}