Pagini recente » Cod sursa (job #562415) | Cod sursa (job #321230) | Cod sursa (job #15951) | Cod sursa (job #1626477) | Cod sursa (job #1053634)
#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;
string line;
getline(in, line);
int val[3];
for (int i = 0; i < M; ++i) {
int v1, v2, vcost;
//in >> v1 >> v2 >> vcost;
getline(in, line);
int no = 0, k = 0, size = line.size();
for (int j = 0; j <= size; ++j) {
if (j == size || line[j] == ' ') {
val[k++] = no;
no = 0;
} else {
no = no * 10 + line[j] - '0';
}
}
v1 = val[0], v2 = val[1], vcost = val[2];
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;
}