Pagini recente » Cod sursa (job #2001475) | Cod sursa (job #1123569) | Cod sursa (job #1296219) | Cod sursa (job #1573343) | Cod sursa (job #2019854)
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
#include <cassert>
#include <cstring>
#include <climits>
#include <queue>
#include <stack>
using namespace std;
typedef long long LL;
typedef unsigned long long hsh;
#ifdef INFOARENA
#define ProblemName "sate"
#endif
#define MCONCAT(A, B) A B
#ifdef ProblemName
#define InFile MCONCAT(ProblemName, ".in")
#define OuFile MCONCAT(ProblemName, ".out")
#else
#define InFile "fis.in"
#define OuFile "fis.out"
#endif
const int MAXN = 30010;
vector< pair<int, int> > G[MAXN];
int dst[MAXN];
void DFS(int nod) {
stack<int> S;
S.push(nod);
dst[nod] = 0;
while (!S.empty()) {
int x = S.top(); S.pop();
for (const auto &it : G[x]) {
if (dst[it.first] >= 0)
continue;
int multiplier = (it.first >= x) ? 1 : (-1);
dst[it.first] = dst[x] + it.second * multiplier;
S.push(it.first);
}
}
}
int main() {
assert(freopen(InFile, "r", stdin));
assert(freopen(OuFile, "w", stdout));
memset(dst, 0xFF, sizeof(dst));
int N, M, X, Y;
scanf("%d%d%d%d", &N, &M, &X, &Y);
--X, --Y;
while (M--) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
--a, --b;
G[a].push_back(make_pair(b, c));
G[b].push_back(make_pair(a, c));
}
DFS(X);
printf("%d\n", dst[Y]);
return 0;
}