Cod sursa(job #1538782)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 29 noiembrie 2015 19:28:48
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#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;
}