Pagini recente » Cod sursa (job #2845915) | Cod sursa (job #1530611) | Cod sursa (job #3142134) | Cod sursa (job #1866893) | Cod sursa (job #2245481)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
int m, X, Y, i, j, t, d, dist[30003];
short c[30003], crt, var, p, u, a, b, n;
char f[30003];
vector<int> v[30003], vec[30003];
int main(){
fin>>n>>m>>X>>Y;
for(i=1;i<=m;i++){
fin>>a>>b>>d;
v[a].push_back(b);
vec[a].push_back(d);
if(b == Y)
dist[a] = d;
v[b].push_back(a);
vec[b].push_back(d);
if(a == Y)
dist[b] = d;
}
p = u = 1;
c[1] = X;
f[X] = 1;
while(p<=u){
crt = c[p];
for(i=0;i<v[crt].size();i++){
var = v[crt][i];
if(f[var] == 0){
f[var] = 1;
c[++u] = var;
if(var < X && crt < X)
if(var < crt)
dist[var] = vec[crt][i] + dist[crt];
else
dist[var] = -vec[crt][i] + dist[crt];
else
if( var > X && crt > X)
if(var > crt)
dist[var] = vec[crt][i] + dist[crt];
else
dist[var] = -vec[crt][i] + dist[crt];
else
dist[var] = vec[crt][i] - dist[crt];
if(var == Y){
fout<<dist[var];
return 0;
}
}
}
p++;
}
return 0;
}