Pagini recente » Cod sursa (job #1735169) | Cod sursa (job #1610553) | Cod sursa (job #1640905) | Cod sursa (job #3234760) | Cod sursa (job #1253103)
#include<bits/stdc++.h>
using namespace std;
struct cell
{
int nod,cost;
};
const int NMAX=30005;
int n,m,X,Y,c[NMAX];
vector<cell>v[NMAX];
bitset<NMAX>viz;
int a,b;
inline void DFS(int x)
{
viz[x]=1;
for (vector<cell>::iterator it=v[x].begin();it!=v[x].end();it++)
if (!viz[(*it).nod])
{
a=(*it).nod;
b=(*it).cost;
c[a]=abs(c[x]-b);
if ((x>a && X>a && x<X) || (x<a && X<a && x>X))
c[a]=c[x]+b;
DFS(a);
}
}
int main()
{
int i,x;
cell k;
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&X,&Y);
for (i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&(k.nod),&(k.cost));
v[x].push_back(k);
swap(x,k.nod);
v[x].push_back(k);
}
viz[X]=1;
for (vector<cell>::iterator it=v[X].begin();it!=v[X].end();it++)
{
c[(*it).nod]=(*it).cost;
DFS((*it).nod);
}
printf("%d\n",c[Y]);
return 0;
}