Pagini recente » Cod sursa (job #1114615) | Cod sursa (job #1035497) | Cod sursa (job #2002014) | Cod sursa (job #267003) | Cod sursa (job #2196850)
#include <limits.h>
#include <stdio.h>
#define NMAX 30000
#define MMAX 100024
static struct edge {
int v;
int d;
int next;
} edges[2*MMAX+1];
static int adj_list[NMAX], dist[NMAX], q[NMAX<<1], visited[NMAX];
int main(void)
{
int i, n, m, x, y, u, v, s, qt, qh;
freopen("sate.in", "r", stdin);
freopen("sate.out", "w", stdout);
scanf("%d %d %d %d", &n, &m, &x, &y);
for (i = 1; i <= m; i++) {
scanf("%d %d %d", &u, &v, &s);
edges[2*i].v = v;
edges[2*i].d = s;
edges[2*i].next = adj_list[u];
adj_list[u] = 2*i;
edges[2*i+1].v = u;
edges[2*i+1].d = s;
edges[2*i+1].next = adj_list[v];
adj_list[v] = 2*i+1;
}
qh = qt = 0;
q[qt++] = x;
visited[x] = 1;
while (qh < qt) {
s = q[qh++];
for (i = adj_list[s]; i != 0; i = edges[i].next) {
if (!visited[edges[i].v]) {
visited[edges[i].v] = 1;
q[qt++] = edges[i].v;
if (s < edges[i].v) {
dist[edges[i].v] = dist[s] + edges[i].d;
} else {
dist[edges[i].v] = dist[s] - edges[i].d;
}
if (edges[i].v == y) {
printf("%d\n", dist[edges[i].v]);
return 0;
}
}
}
}
}