Pagini recente » Cod sursa (job #329220) | Cod sursa (job #2107991) | Cod sursa (job #3180315) | Cod sursa (job #2259467) | Cod sursa (job #67528)
Cod sursa(job #67528)
#include <stdio.h>
#include <stdlib.h>
#define FIN "sate.in"
#define FOUT "sate.out"
#define MAXN 30001
int n, m, x, y;
struct elem { int x, c; elem *r; } * L[MAXN];
void push(int a, int b, int c)
{
elem *temp = new elem;
temp->x = b; temp->c = c; temp->r = L[a];
L[a] = temp;
}
void citire()
{
int i, a, b, c;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d%d%d%d", &n, &m, &x, &y);
for (i=0; i<m; ++i) {
scanf("%d %d %d", &a, &b, &c);
push(a, b, c);
push(b, a, -c);
}
}
long long dist = 0;
int prev;
void fixme(int s)
{
if (s == y/* || -s == y+1*/) {
printf("%lld\n", dist); exit(0);
}
//if (s<0) s = -s;
for (elem *p = L[s], *last=0; p; last = p, p = p->r) {
if (p->x == prev) continue;
//if (s == x-1 && p->x - s > 0) continue;
// eclipsam...
elem *tembel = last ? last->r : L[s];
tembel = p->r;
//fprintf(stderr, "%d => %d (%d)\n", s, p->x, p->c);
dist += p->c;
prev = s;
fixme(p->x/* < s ? -p->x : p->x*/);
dist -= p->c;
// revenim cu el
tembel = p;
}
}
int main()
{
citire();
fixme(x);
//if (x-1 > 0) fixme(x-1);
return 0;
}