Pagini recente » Cod sursa (job #396220) | Cod sursa (job #1017847) | Cod sursa (job #942586) | Cod sursa (job #1510952) | Cod sursa (job #1052324)
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#define MAXN 30001
using namespace std;
int N, M, X, Y, dist[MAXN];
vector<int> Graph[MAXN], cost[MAXN];
bitset<MAXN> seen;
queue<int> que;
void input() {
ifstream in("sate.in");
in >> N >> M >> X >> Y;
for (int i = 0; i < M; ++i) {
int v1, v2, vcost;
in >> v1 >> v2 >> vcost;
Graph[v1].push_back(v2);
cost[v1].push_back(vcost);
Graph[v2].push_back(v1);
cost[v2].push_back(vcost);
}
in.close();
}
int BFS() {
que.push(X);
while (!que.empty()) {
int node = que.front();
que.pop();
int size = Graph[node].size();
for (int i = 0; i < size; ++i) {
int adjancted = Graph[node][i];
if (!seen[adjancted]) {
if (node < adjancted) {
dist[adjancted] = dist[node] + cost[node][i];
} else {
dist[adjancted] = dist[node] - cost[node][i];
}
if (adjancted == Y) {
return dist[adjancted];
}
seen[adjancted] = 1;
que.push(adjancted);
}
}
}
}
void output() {
ofstream out("sate.out");
out << BFS();
out.close();
}
int main() {
input();
output();
return 0;
}