Cod sursa(job #947690)

Utilizator OpportunityVlad Negura Opportunity Data 8 mai 2013 09:26:20
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <fstream>
using namespace std;
ifstream fi("distante.in");
ofstream fo("distante.out");

#define INF 1<<21

struct cell{int x,y,c;}a[50001];
int t,n,m,s,i,j,b[50001];

string check(){
	
	int c[50001],ok=1;
	for (i=1; i<=n; i++) c[i]=INF;
	c[s]=0;
	while (ok){
		ok=0;
		for (i=1; i<=m; i++)
			if (c[a[i].x]+a[i].c<c[a[i].y]) c[a[i].y]=c[a[i].x]+a[i].c;
	}
	
	for (i=1; i<=n; i++) 
		if (b[i]!=c[i]) return "NU\n";
	
	return "DA\n";
}

int main(){
	
	fi >> t;
	
	while (t--){
		
		fi >> n >> m >> s;
		for (i=1; i<=n; i++) fi >> b[i];
		for (i=1; i<=m; i++) fi >> a[i].x >> a[i].y >> a[i].c;
		fo << check();
	}	
	
	return 0;
}