Cod sursa(job #1826952)

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

int T, N, M, S;
vector <int> D, Di;
vector <bool> used;
vector <vector<int> > C;

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--;
		D.resize(N);
		for (k=0; k<N; k++)
			fin >> D[k];
		C.resize(N, vector<int>(N, INF));
		for (k=0; k<M; k++){
			fin >> i >> j >> dist;
			i--; j--;
			C[i][j]=C[j][i]=dist;
		}
		Di.resize(N);
		used.resize(N, false);
		for (k=0; k<N; k++)
			Di[k]=C[k][S];
		Di[S]=0;
		used[S]=true;
		for (i=0; i<N-1; i++){
			dist=INF;
			for (j=0; j<N; j++)
			  if (used[j]==false && dist>Di[j]){
					k=j;
					dist=Di[j];
			  }
			used[k]=true;
			for (j=0; j<N; j++)
			  if (Di[j]>Di[i]+C[i][j])
					Di[j]=Di[i]+C[i][j];
		}
		i=0;
		while (i<N && Di[i]==D[i])
			i++;
		if (i==N)
			fout << "DA\n";
		else
			fout << "NU\n";
	}
	fin.close();
	fout.close();

	return 0;
}