Pagini recente » Cod sursa (job #1164154) | Cod sursa (job #1125528) | Cod sursa (job #1387087) | Cod sursa (job #1961399) | Cod sursa (job #328211)
Cod sursa(job #328211)
#include<stdio.h>
#define Nmx 100010
int X,Y,n,m;
int nr[Nmx],dis[Nmx];
int qu[1000001];
struct nod
{
int dist;
int inf;
nod *urm;
};
nod *G[Nmx];
void insert(int x,int y,int dis)
{
nod *aux;
aux = new nod;
aux -> urm = G[x];
aux -> inf = y;
aux -> dist = dis;
G[x]=aux;
}
void citire()
{
scanf("%d%d%d%d",&n,&m,&X,&Y);
int x,y,d;
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&d);
insert(x,y,d);
insert(y,x,d);
}
}
int bfs()
{
int st=1,dr=1;
qu[1]=X;
nr[X]=1;
while(st<=dr)
{
for(nod *p=G[qu[st]];p!=NULL;p=p->urm)
{
if(!nr[p->inf])
{
nr[p->inf]=nr[qu[st]]+1;
if(p->inf>qu[st])
if(p->inf>X) if(X<qu[st]) dis[p->inf]=dis[qu[st]]+p->dist;
else dis[p->inf]=p->dist-dis[qu[st]];
else dis[p->inf]=dis[qu[st]]-p->dist;
else if(p->inf<X) if(X<qu[st]) dis[p->inf]=p->dist-dis[qu[st]];
else dis[p->inf]=p->dist+dis[qu[st]];
else dis[p->inf]=dis[qu[st]]-p->dist;
qu[++dr]=p->inf;
if(p->inf==Y) return dis[Y];
}
}
++st;
}
return -1;
}
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
citire();
printf("%d\n",bfs());
return 0;
}