Pagini recente » Cod sursa (job #1231419) | Cod sursa (job #1933537) | Cod sursa (job #1239029) | Cod sursa (job #2375549) | Cod sursa (job #1457819)
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
#include <string>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <iterator>
#include <queue>
#include <functional>
#include <utility>
#define INF 1000000005
#define MAX 150005
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
vector<pair<int, int> > v[30001];
int dist[30001];
bool viz[30001];
void BFS(int start, int finish);
int main() {
ios::sync_with_stdio(false);
int n, m, i, s, f, x, y, c;
fin >> n >> m >> s >> f;
for (i = 0; i < m; ++i) {
fin >> x >> y >> c;
if (x < y) {
v[x].push_back({ y, c });
v[y].push_back({ x, -c });
}
else {
v[y].push_back({ x, c });
v[x].push_back({ y, -c });
}
}
BFS(s, f);
fout << dist[f];
return 0;
}
void BFS(int start, int finish) {
int i, last;
pair<int, int> actual;
queue<int> q;
dist[start] = 0;
viz[start] = true;
q.push(start);
while (!q.empty()) {
last = q.front();
q.pop();
for (i = 0; i < v[last].size(); ++i) {
actual = v[last][i];
if (viz[actual.first] == false) {
viz[actual.first] = true;
dist[actual.first] = dist[last] + actual.second;
q.push(actual.first);
}
}
}
}