Pagini recente » Cod sursa (job #2806796) | Cod sursa (job #2119154) | Cod sursa (job #2390103) | Cod sursa (job #2983981) | Cod sursa (job #2966991)
#include <bits/stdc++.h>
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
const int NMAX = 30001;
const int INF = 2000000001;
struct edge{
int next, cost;
};
vector <edge> v[NMAX];
int n, m, start, finish, a, b, cost, dist[NMAX];
void bfs(){
queue <int> q;
q.push(start);
while( !q.empty() ){
int nod = q.front();
q.pop();
if( nod == finish )
break;
for(auto capat : v[nod]){
if( dist[capat.next] == INF ){
q.push( capat.next );
if( nod > capat.next )
dist[capat.next] = dist[nod] - capat.cost;
else
dist[capat.next] = dist[nod] + capat.cost;
}
}
}
out << dist[finish];
}
int main()
{
in >> n >> m >> start >> finish;
for( int i = 0 ; i < m ; i++ ){
in >> a >> b >> cost;
v[a].push_back({b, cost});
v[b].push_back({a, cost});
}
for( int i = 1 ; i <= n ; i++ )
if( i != start )
dist[i] = INF;
bfs();
return 0;
}