Cod sursa(job #414103)

Utilizator Addy.Adrian Draghici Addy. Data 9 martie 2010 18:37:29
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <stdio.h>
#include <vector>
#define Nmax 30050

using namespace std;

int C[Nmax], L[Nmax], dist[Nmax], N, M, X, Y, aux, x, y, d, p, u, i, nod_p, nod;
vector <int> A[Nmax], D[Nmax];

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