Cod sursa(job #449283)

Utilizator Addy.Adrian Draghici Addy. Data 6 mai 2010 09:07:21
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>

#define NMAX 30050

struct nod {
	int v, d;
	nod *next; 
};

nod *G[NMAX], *aux;
int Q[NMAX], dist[NMAX], N, M, X, Y, i, x, y, d, p, u, nod_p, nod_v;

int main() {
	
	FILE *f = fopen("sate.in", "r");
	FILE *g = fopen("sate.out", "w");
	
	fscanf(f, "%d %d %d %d", &N, &M, &X, &Y);
	for (i = 1; i <= M; i++) {
		fscanf(f, "%d %d %d", &x, &y, &d);
		
		aux = new nod;
		aux -> v = y, aux -> d = d;
		aux -> next = G[x], G[x] = aux;
		
		aux = new nod;
		aux -> v = x, aux -> d = d;
		aux -> next = G[y], G[y] = aux;
	}
	
	Q[1] = X;
	for (p = u = 1; p <= u; p++) {
		nod_p = Q[p];
		for (aux = G[nod_p]; aux != NULL; aux = aux -> next) {
			nod_v = aux -> v;
			if (!dist[nod_v]) {
				Q[++u] = nod_v;
				if (nod_v > nod_p)
					dist[nod_v] = dist[nod_p] + aux -> d;
				else
					dist[nod_v] = dist[nod_p] - aux -> d;
				if (nod_v == Y) {
					p = u + 1; break;
				}
			}
		}
	}
	
	fprintf(g, "%d", dist[Y]);
	
	fclose(f); fclose(g);
	
	return 0;
}