Pagini recente » Cod sursa (job #154995) | Cod sursa (job #2302618) | Cod sursa (job #430195) | Cod sursa (job #2380159) | Cod sursa (job #2894220)
#include<iostream>
#include<vector>
#include<fstream>
#include<queue>
#include<map>
#define N 100030
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
vector < pair<int, int> > adj[N];
map<int,pair<int,int>> p;
int n, m, x, y;
long long d;
void input();
void print();
void bfs(int node);
int main() {
input();
// print();
bfs(x);
map<int, pair<int, int>>::iterator it;
it = p.find(y);
while (it != p.end()) {
d = d + it->second.second;
it = p.find(it->second.first);
}
g << d << endl;
return 0;
}
void bfs(int node) {
queue<int> q;
vector<bool> vis(N,0);
q.push(node);
vis[node] = 1;
while (!q.empty()) {
int nr = q.front();
for (int i = 0; i < adj[nr].size(); ++i) {
if (!vis[adj[nr][i].first]) {
vis[adj[nr][i].first] = 1;
if (nr < adj[nr][i].first) {
p.insert({ adj[nr][i].first,{ nr, adj[nr][i].second } });
}
else {
p.insert({ adj[nr][i].first,{ nr, -adj[nr][i].second } });
}
if (adj[nr][i].first == y) {
return;
}
q.push(adj[nr][i].first);
}
}
q.pop();
}
}
void print() {
for (int i = 1; i <= n; i++) {
for (int j = 0; j < adj[i].size(); ++j) {
cout <<i<<" "<<adj[i][j].first << " " << adj[i][j].second << endl;
}
cout << endl;
}
}
void input(){
int a, b , c;
f >> n >> m>>x>>y;
for (int i = 1; i <= m; i++){
f >> a >> b >> c;
adj[a].push_back({ b, c });
adj[b].push_back({ a, c });
}
}