Pagini recente » Cod sursa (job #2866518) | Cod sursa (job #1312461) | Cod sursa (job #284355) | Cod sursa (job #1867997) | Cod sursa (job #1125951)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <deque>
using namespace std;
int main() {
freopen("sate.in", "r", stdin);
freopen("sate.out", "w", stdout);
vector <int> v[30002];
deque <int> que;
vector <long long> edge[30002];
int n, m, i, j, s, f, q, x, y;
long long d;
scanf("%d %d %d %d", &n, &m, &s, &f);
vector <int> viz(n+1, 0);
vector <long long> dis(n + 1, 0);
//v = new vector<int>[n];
//edge = new vector<long long>[n];
for (i = 0; i < m; i++) {
scanf("%d %d %lld", &x, &y, &d);
v[x].push_back(y);
edge[x].push_back(d);
v[y].push_back(x);
edge[y].push_back(-d);
}
viz[s] = 1;
dis[s] = 0;
que.push_back(s);
while (!que.empty()) {
q = que.front();
que.pop_front();
if (v[q].empty()) continue;
for (i = 0; i < v[q].size(); i++) {
if (viz[v[q][i]] == 0) {
dis[v[q][i]] += dis[q] + edge[q][i];
viz[v[q][i]] = 1;
que.push_back(v[q][i]);
}
}
}
printf("%lld", dis[f]);
return 0;
}