Pagini recente » Cod sursa (job #2548505) | Cod sursa (job #2167144) | Cod sursa (job #351537) | Cod sursa (job #2662924) | Cod sursa (job #2245475)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
int n, m, X, Y, i, j, t, a, b, d, dist[30003], p, u, c[30003], f[30003], crt, var;
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;
}
/*
for(i=1;i<=n;i++)
for(j=0;j<v[i].size()-1;j++){
crt = v[i][j];
for(t=j+1;t<v[i].size();t++){
var = v[i][t];
if ((crt < i && var < i )|| (crt > i && var > i)){
dist = vec[i][t] - vec[i][j];
}
}
}
*/