Cod sursa(job #273408)

Utilizator razyelxrazyelx razyelx Data 8 martie 2009 15:35:37
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream.h>
#define N 50001

ifstream in("distante.in");
ofstream out("distante.out");

int t,n,m,s,df[N],di[N];
struct mu{int y,c;
	  mu *urm;} *muc[N];
void adauga(mu *&prim,int y,int c){
     mu *p;
     p = new mu;
     p->y = y;
     p->c = c;
     p->urm = prim;
     prim = p;
}

void solve(){
     int i,x,y,c,ok,ok2;
     mu *p;
     in>>t;

     for(;t>0;t--){
	in>>n>>m>>s;
	for(i=1;i<=n;++i){in>>df[i];muc[i] = NULL;}
	for(i=1;i<=n;++i){
	   in>>x>>y>>c;
	   adauga(muc[x],y,c);
	   adauga(muc[y],x,c);
	}
	ok = ok2 = 0;
	for(i=1;i<=n && !ok && !ok2;++i){
	   if(i != s){
	     ok2 = 1;

	     for(p=muc[i];p && !ok && ok2;p=p->urm){

		if(df[i] == df[p->y] + p->c)ok2 = 0;

		if(df[i] > df[p->y] + p->c) ok  = 1;
	     }

	   }
	}
	if(ok)out<<"NU\n";
	else out<<"DA\n";

     }
}



int main(){
    solve();
    return 0;
}