Pagini recente » Rating Antofe Bianca (bia_14_15) | Istoria paginii runda/oni2015.1112.bv.03/clasament | Cod sursa (job #198017) | Cod sursa (job #1572288) | Cod sursa (job #1538782)
#include <cstdio>
const int MAX_N = 30000;
const int MAX_M = 100024;
const int NIL = -1;
struct Edge {
int v, cost;
int next;
};
Edge l[2 * MAX_M];
int adj[MAX_N];
int D[MAX_N];
void addEdge(int u, int v, int cost, int pos) {
l[pos].v = v;
l[pos].cost = cost;
l[pos].next = adj[u];
adj[u] = pos;
}
void DFS(int u) {
for (int i = adj[u]; i != NIL; i = l[i].next) {
int v = l[i].v;
if (D[v] == NIL) {
D[v] = D[u] + l[i].cost;
DFS(v);
}
}
}
int main(void) {
freopen("sate.in", "r", stdin);
freopen("sate.out", "w", stdout);
int N, M, start, end;
scanf("%d%d%d%d", &N, &M, &start, &end);
for (int i = 0; i < N; i++) {
adj[i] = NIL;
D[i] = NIL;
}
for (int i = 0; i < M; i++) {
int u, v, cost;
scanf("%d%d%d", &u, &v, &cost);
addEdge(u - 1, v - 1, cost, 2 * i);
addEdge(v - 1, u - 1, -cost, 2 * i + 1);
}
fclose(stdin);
start--;
end--;
D[start] = 0;
DFS(start);
printf("%d\n", D[end]);
fclose(stdout);
return 0;
}