Pagini recente » Cod sursa (job #102388) | Cod sursa (job #913470) | Cod sursa (job #1922100) | Cod sursa (job #974308) | Cod sursa (job #328224)
Cod sursa(job #328224)
#include<stdio.h>
#define Nmx 30001
int X,Y,n,m;
int nr[Nmx];
int qu[100001];
int dis[100001];
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;
int k=p->inf;
int i=X,j=qu[st];
qu[++dr]=p->inf;
if(i<j)
{if(k<i)
dis[k]=p->dist-dis[j];
else
if(k>i&&k<j)
dis[k]=dis[j]-p->dist;
else if(k>j)
dis[k]=dis[j]+p->dist;
}
else if(i>j)
{if(k<j)
dis[k]=dis[j]+p->dist;
else
if(k>j&&k<i)
dis[k]=dis[j]-p->dist;
else if(k>i)
dis[k]=p->dist-dis[j];
}
else dis[k]=p->dist;
if(p->inf==Y) return dis[Y];
}
}
++st;
}
return 0;
}
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
citire();
printf("%d\n",bfs());
return 0;
}