Pagini recente » Cod sursa (job #797128) | Cod sursa (job #3241114) | Cod sursa (job #1772651) | Cod sursa (job #285786) | Cod sursa (job #2367065)
#include <fstream>
#include <vector>
#include <deque>
#include <cmath>
using namespace std;
ifstream fin( "sate.in" );
ofstream fout( "sate.out" );
const int NMAX = 30005;
int N, M;
int X, Y;
vector <int> Ad[NMAX];
vector <int> D[NMAX];
int dist[NMAX];
void Read()
{
fin >> N >> M >> X >> Y;
int a, b, d;
for( int i = 1; i <= M; ++i )
{
fin >> a >> b >> d;
Ad[a].push_back( b );
D[a].push_back( d );
Ad[b].push_back( a );
D[b].push_back( d );
}
fin.close();
}
void Do()
{
dist[X] = 1;
deque <int> Q;
Q.push_back( X );
bool done = false;
int u, w;
while( !Q.empty() && !done )
{
u = Q.front();
Q.pop_front();
for( int i = 0; i < Ad[u].size(); ++i )
{
w = Ad[u][i];
if( dist[w] == 0 )
{
if( ( X <= u && u <= w ) || ( w <= u && u <= X ) ) dist[w] = dist[u] + D[u][i];
else dist[w] = abs( dist[u] - D[u][i] );
Q.push_back( w );
if( w == Y )
{
done = true;
break;
}
}
}
}
fout << dist[Y] - 1 << '\n';
}
int main()
{
Read();
Do();
return 0;
}