Pagini recente » Cod sursa (job #2759202) | Cod sursa (job #1870316) | Cod sursa (job #2301390) | Cod sursa (job #434002) | Cod sursa (job #296349)
Cod sursa(job #296349)
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
#define FIN "sate.in"
#define FOUT "sate.out"
#define N 30010
int n, m, x, y, d;
vector < pair <int, int> > v[N];
vector <int> p[N];
void read()
{
int i, a, b, c;
freopen(FIN, "r", stdin);
scanf("%d%d", &n, &m);
scanf("%d%d", &a, &b);
x = min(a, b);
y = max(a, b);
for (i = 1; i <= m; ++i)
{
scanf("%d%d%d", &a, &b, &c);
v[a].push_back(make_pair(b, c));
p[b].push_back(v[a].size() - 1);
v[b].push_back(make_pair(a, c));
p[a].push_back(v[b].size() - 1);
}
}
int mod(int a)
{
return a > 0 ? a : -a;
}
void DFS(int a, int d1)
{
int i, d2, k;
if (a == y)
d = d1;
for (i = 0; i < v[a].size(); ++i)
if (v[a][i].first)
{
if ((x <= a && a < v[a][i].first) || (x >= a && a > v[a][i].first))
d2 = d1 + v[a][i].second;
else
d2 = mod(d1 - v[a][i].second);
k = v[a][i].first;
v[a][i].first = 0;
v[k][p[a][i]].first = 0;
DFS(k, d2);
}
return;
}
int main()
{
freopen(FOUT, "w", stdout);
read();
DFS(x, 0);
printf("%d\n", d);
}