Pagini recente » Cod sursa (job #912921) | Cod sursa (job #1509459) | Statistici Lisca Ana (aokirisaki) | Cod sursa (job #2937339) | Cod sursa (job #932358)
Cod sursa(job #932358)
#include <cstdio>
#include <vector>
#define NMAX 50100
#define minim(a,b) ((a<b)?(a):(b))
#define oo 1<<30
using namespace std;
int N,M,S;
int A[NMAX];
bool ok;
struct node_structure {
int vecin,cost;
};
vector < node_structure > G[NMAX];
void Read() {
int x,y,c;
scanf("%d%d%d",&N,&M,&S);
for(int i=1;i<=N;++i)
scanf("%d",&A[i]);
while(M--) {
scanf("%d%d%d",&x,&y,&c);
G[x].push_back({y,c});
G[y].push_back({x,c});
}
}
void Verif_Dijkstra(int sursa) {
int i,dist;
unsigned j;
ok=true;
for(i=1;i<=N;++i) {
if(i==sursa)
continue;
dist=oo;
for(j=0;j<G[i].size();++j)
dist=minim(dist,G[i][j].cost+A[G[i][j].vecin]);
if(dist != A[i]) {
ok=false;
return;
}
}
}
void Print() {
if(ok)
printf("DA\n");
else
printf("NU\n");
}
int main() {
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
int T;
scanf("%d",&T);
while(T--) {
Read();
Verif_Dijkstra(S);
Print();
}
return 0;
}