Pagini recente » Cod sursa (job #334714) | Cod sursa (job #286689) | Cod sursa (job #2084037) | Cod sursa (job #1449957) | Cod sursa (job #359883)
Cod sursa(job #359883)
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
#define FIN "sate.in"
#define FOUT "sate.out"
#define N 30010
#define MAX 60
int m, d;
short int x, y, n;
vector < short int > v[N], p[N];
vector <int> ds[N];
void read()
{
int i, j, a[3], nr;
char s[MAX];
freopen(FIN, "r", stdin);
scanf("%hd%d", &n, &m);
scanf("%hd%hd\n", &a[0], &a[1]);
x = min(a[0], a[1]);
y = max(a[0], a[1]);
for (i = 1, nr = 0; i <= m; ++ i)
{
gets(s);
a[0] = a[1] = a[2] = 0;
for (j = 0, nr = 0 ; s[j] && s[j] != 13; ++ j)
{
if (s[j] == ' ')
++ nr;
else
a[nr] = a[nr] * 10 + (s[j] - '0');
}
v[a[0]].push_back(a[1]);
ds[a[0]].push_back(a[2]);
p[a[1]].push_back(v[a[0]].size() - 1);
v[a[1]].push_back(a[0]);
ds[a[1]].push_back(a[2]);
p[a[0]].push_back(v[a[1]].size() - 1);
scanf("\n");
}
}
int mod(int a)
{
return a > 0 ? a : -a;
}
void DFS(short int a, int d1)
{
short int i, k;
int d2;
if (a == y)
d = d1;
for (i = 0; i < v[a].size(); ++i)
if (v[a][i])
{
if ((x <= a && a < v[a][i]) || (x >= a && a > v[a][i]))
d2 = d1 + ds[a][i];
else
d2 = mod(d1 - ds[a][i]);
k = v[a][i];
v[a][i] = 0;
v[k][p[a][i]] = 0;
DFS(k, d2);
}
return;
}
int main()
{
freopen(FOUT, "w", stdout);
read();
DFS(x, 0);
printf("%d\n", d);
}