Pagini recente » Cod sursa (job #1488918) | Cod sursa (job #1120795) | Cod sursa (job #1890590) | Cod sursa (job #702391) | Cod sursa (job #1304524)
#include <cstdio>
#include <vector>
#include <cstring>
#include <cmath>
#define DIM 30002
#define a first
#define b second
using namespace std;
int n,m,x,y,viz[DIM],C[DIM],D,dist[DIM];
vector < pair<int,int> > v[DIM];
void BFS(int n){
int p,u;
viz[n]=1;
C[1]=n;p=u=1;
while(p<=u && !viz[y]){
n=C[p++];
for(int i=0;i<v[n].size();i++){
if(!viz[v[n][i].a]){
if((n>x && v[n][i].a>x && v[n][i].a<n) || (n<x && v[n][i].a<x && v[n][i].a>n) || (n>x && v[n][i].a<x) || (n<x && v[n][i].a>x))
dist[v[n][i].a]=abs(dist[n]-v[n][i].b);
else
dist[v[n][i].a]=dist[n]+v[n][i].b;
viz[v[n][i].a]=1;
C[++u]=v[n][i].a;
}
}
}
}
int main(){
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&x,&y);
while(m--){
int g,f;
scanf("%d%d%d",&g,&f,&D);
v[g].push_back(make_pair(f,D));
v[f].push_back(make_pair(g,D));
}
BFS(x);
printf("%d",dist[y]);
return 0;
}