Pagini recente » Cod sursa (job #1014637) | Cod sursa (job #2814995) | Cod sursa (job #310860) | Cod sursa (job #1543084) | Cod sursa (job #2963252)
#include <fstream>
#include <vector>
#include <queue>
std::ifstream fin("sate.in");
std::ofstream fout("sate.out");
constexpr std::size_t LIM = 3 * 1e4 + 1;
struct AdjNode {
int node, weight;
AdjNode() noexcept : node(), weight() {}
AdjNode(int node, int weight) noexcept
: node(node), weight(weight) {}
};
int N, M, X, Y, i, node1, node2, weight;
std::vector<AdjNode> adj_list[LIM];
int distance[LIM];
bool visited[LIM];
static inline void bfs(int start_node) {
std::queue<int> queue;
queue.push(start_node);
visited[start_node] = true;
while (!queue.empty()) {
const int node = queue.front();
queue.pop();
for (const AdjNode& adj : adj_list[node])
if (!visited[adj.node]) {
if (adj.node < node)
distance[adj.node] = distance[node] - adj.weight;
else distance[adj.node] = distance[node] + adj.weight;
visited[adj.node] = true;
queue.push(adj.node);
}
}
}
int main() {
fin >> N >> M >> X >> Y;
for (i = 1; i <= M; ++i) {
fin >> node1 >> node2 >> weight;
adj_list[node1].emplace_back(node2, weight);
adj_list[node2].emplace_back(node1, weight);
}
bfs(X);
fout << distance[Y];
fin.close();
fout.close();
return 0;
}