Pagini recente » Cod sursa (job #1849797) | Cod sursa (job #1410896) | Cod sursa (job #2632672) | Cod sursa (job #666719) | Cod sursa (job #1813630)
#include <stdio.h>
#include <stdlib.h>
int nr,lista[30001],nod[100025],next[100025],mark[30001],dist[100025],coada[30001];
void add(int x,int y,int d)
{
nr++;
nod[nr]=y;
dist[nr]=d;
next[nr]=lista[x];
lista[x]=nr;
}
int main()
{
int n,m,x,y,i,a,b,d,p,u;
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&x,&y);
for(i=1; i<=n; i++)
{
scanf("%d%d%d",&a,&b,&d);
if(a>b) d=-d;
add(a,b,d);
add(b,a,-d);
}
p=u=1;
coada[1]=x;
mark[x]=1;
while(p<=u)
{
x=lista[coada[p]];
while(x)
{
if(mark[nod[x]]==0)
{
mark[nod[x]]=mark[coada[p]]+dist[x];
coada[++u]=nod[x];
}
x=next[x];
}
p++;
}
printf("%d\n",mark[y]-1);
return 0;
}