Pagini recente » Cod sursa (job #1972063) | Cod sursa (job #766679) | Cod sursa (job #614967) | Cod sursa (job #291657) | Cod sursa (job #1490198)
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
#include <bitset>
using namespace std;
bitset<36001> v;
vector<pair<int,int>> g[30001];
int d[30001], n, m, x, y,a,b,c;
int bfs(int& x,int& y){
queue<int> q;
q.push(x);
while (!q.empty()){
int r = q.front();
q.pop();
for (auto& i : g[r]){
if (r == y) return r < y ? d[r] + i.second : d[r] - i.second;
else if (!v[i.first]){
if (r < i.first) d[i.first] = d[r] + i.second;
else d[i.first] = d[r] - i.second;
v[i.first] = 1;
q.push(i.first);
}
}
}
}
int main(){
ifstream f("sate.in");
ofstream of("sate.out");
f >> n >> m >> x >> y;
for (int i = 0; i < m; ++i){
f >> a >> b >> c;
g[a].push_back(make_pair(b, c));
g[b].push_back(make_pair(a, c));
}
memset(d, -1, sizeof(d));
d[x] = 0;
bfs(x, y);
of << d[y];
}