Pagini recente » Cod sursa (job #1812128) | Cod sursa (job #1261432) | Cod sursa (job #1592397) | Cod sursa (job #1261424) | Cod sursa (job #626141)
Cod sursa(job #626141)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
#define NMAX 30005
vector < pair<int, int> > A[NMAX];
queue<int> Q;
int dist[NMAX], viz[NMAX];
int N, M, X, Y, tail, head;
void read()
{
scanf("%d %d %d %d", &N, &M, &X, &Y);
if (X > Y) {
int aux = X;
X = Y;
Y = aux;
}
int i, x, y, cost;
for (i=1; i<=M; ++i) {
scanf("%d %d %d", &x, &y, &cost);
A[x].push_back(make_pair(y, cost));
A[y].push_back(make_pair(x, cost));
}
}
void BFS(int source)
{
int i;
viz[source] = 1;
Q.push(source);
dist[source] = 0;
while (!Q.empty()) {
int node = Q.front();
Q.pop();
for (i=0; i<A[node].size(); ++i)
if (!viz[A[node][i].first]) {
viz[A[node][i].first] = 1;
Q.push(A[node][i].first);
if (A[node][i].first < node)
dist[A[node][i].first] = dist[node] - A[node][i].second;
else
dist[A[node][i].first] = dist[node] + A[node][i].second;
}
}
}
int main()
{
freopen("sate.in", "r", stdin);
freopen("sate.out", "w", stdout);
read();
BFS(X);
printf("%d ", dist[Y]);
return 0;
}