Cod sursa(job #1072839)

Utilizator gabriel.badeaGabriel Badea gabriel.badea Data 4 ianuarie 2014 23:06:15
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <stdio.h>
using namespace std;

#define MAX 100000

int distanta[50000]; // vector de distante de la nodul sursa la restul nodurilor
bool exista;		// flag in caz ca distantele sunt sau nu corecte

int main()
{
	int nr_teste, nr_noduri, nr_muchii, nod_sursa, sursa, destinatie, cost;

	freopen("distante.in", "r", stdin);
	freopen("distante.out", "w", stdout);

	scanf("%d", &nr_teste);						// numarul de grafuri

	while(nr_teste)
	{
		exista = true;

		scanf("%d%d%d", &nr_noduri, &nr_muchii, &nod_sursa);

		for(int i = 1; i <= nr_noduri; ++i)
			scanf("%d", &distanta[i]);					// citim vectorul de distante

		for(int i = 1; i <= nr_muchii; ++i)
		{
			scanf("%d%d%d", &sursa, &destinatie, &cost);

			if(distanta[sursa] + cost < distanta[destinatie])		// se verifica proprietatile de relaxare 
				exista = false;
			if(distanta[destinatie] + cost < distanta[sursa])		// se verifica proprietatile de relaxare 
				exista = false;
		}

		if(distanta[nod_sursa] != 0)
			exista = false;				// distanta de la nodul sursa la el insusi e mereu 0

		if(exista)
			printf("DA\n");				// cazul in care toate distantele sunt corect calculate de Bronzarel
		else
			printf("NU\n");

		nr_teste--;
	}

	return 0;
}