Pagini recente » Cod sursa (job #2091723) | Cod sursa (job #601523) | Cod sursa (job #2713369) | Cod sursa (job #2257394) | Cod sursa (job #1452367)
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
#define DIM 50100
#define INF (1<<30)
#define f first
#define s second
using namespace std;
int N, M, T, Ver[DIM], Fin[DIM], X, Y, Z, K, S;
vector < int > V[DIM];
int main(){
freopen("distante.in" ,"r", stdin );
freopen("distante.out","w", stdout);
scanf("%d", &T);
for(T = T; T; T --){
scanf("%d %d %d", &N, &M, &S);
for(int i = 1; i <= N; i ++)
scanf("%d", &Fin[i]);
for(int i = 1; i <= N; i ++)
V[i].resize(0);
int ok = 1;
for(int i = 1; i <= M; i ++){
scanf("%d %d %d", &X, &Y, &Z);
V[X].push_back(Y); V[X].push_back(Z);
V[Y].push_back(X); V[Y].push_back(Z);
}
for(int i = 1; i <= N; i ++){
if(i == S) continue;
int ok2 = 0, ok3 = 1;
for(int j = 0; j < V[i].size(); j += 2){
int poz = V[i][j], cost = V[i][j+1];
if(Fin[poz] + cost < Fin[i])
ok3 = 0;
if(Fin[poz] + cost == Fin[i])
ok2 = 1;
}
if(ok2 == 0 || ok3 == 0){
ok = 0;
break;
}
}
if(Fin[S] != 0)
ok = 0;
switch(ok){
case 1:{printf("DA\n");break;}
case 0:{printf("NU\n");break;}
}
}
return 0;
}