Pagini recente » Cod sursa (job #77410) | Cod sursa (job #621998) | Cod sursa (job #2242173) | Cod sursa (job #1156060) | Cod sursa (job #209018)
Cod sursa(job #209018)
#include<stdio.h>
#define N 30002
struct nod{ long inf,dist;nod *urm;};
nod *paux,*prim[N];
int n,m,x,y,p,q,di,i,solved,d[N],t,b,co[N],viz[N],act;
void readd(),solve(),pune(),bfs();
int main()
{
readd();
solve();
return 0;
}
void readd()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&x,&y);
if(x>y){p=x;x=y;y=p;}
for(i=1;i<=m;i++)
{ scanf("%d%d%d",&p,&q,&di);
pune();
}
}
void solve()
{ if(solved)return;
bfs();
printf("%d",d[y]);
}
void pune()
{
paux=new nod;
paux->inf=q;
paux->dist=di;
paux->urm=(prim[p])?prim[p]:0;
prim[p]=paux;
paux=new nod;
paux->inf=p;
paux->dist=-di;
paux->urm=(prim[q])?prim[q]:0;
prim[q]=paux;
}
void bfs()
{
t=b=1;
co[t]=x;viz[x]=1;
while(b<=t)
{ act=co[b];
for(paux=prim[act];paux;paux=paux->urm)
{ if(viz[paux->inf])continue;
d[paux->inf]=d[act]+paux->dist;
t++;
co[t]=paux->inf;
viz[paux->inf]=1;
}
b++;
}
}