Cod sursa(job #1827004)

Utilizator eilerGabriel-Ciprian Stanciu eiler Data 11 decembrie 2016 12:31:03
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <vector>
#include <fstream>
#define MAX 50000
#define INF 2000000000
using namespace std;

int T, N, M, S, D[MAX];
vector <int> Node[MAX], C[MAX];

void initC(){
	int i;
	for (i=0; i<N; i++){
		Node[i].clear();
		C[i].clear();
	}
}

int main(){
	int i, j, k, x, dist;

	ifstream fin ("distante.in");
	ofstream fout ("distante.out");
	fin >> T;
	for (x=0; x<T; x++){
		fin >> N >> M >> S; S--;

		for (i=0; i<N; i++)
			fin >> D[i];
		initC();
		for (i=0; i<M; i++){
			fin >> j >> k >> dist;
			j--; k--;
			Node[j].push_back(k); Node[k].push_back(j);
			C[j].push_back(dist); C[k].push_back(dist);
		}

		i=N-1;
		while (i>=0){
			if (i==S){
				if (D[i]!=0)
					i=-1;
			}
			else{
				dist=INF;
				for (j=0; j<Node[i].size(); j++)
					if (dist>D[Node[i][j]]+C[i][j])
						dist=D[Node[i][j]]+C[i][j];
				if (dist!=D[i])
					i=-1;
			}
			i--;
		}
		if (i==-1)
			fout << "DA\n";
		else
			fout << "NU\n";
	}
	fin.close();
	fout.close();

	return 0;
}