Pagini recente » Cod sursa (job #1458014) | Cod sursa (job #2207300) | Cod sursa (job #368327) | cls11_oni_20_ian | Cod sursa (job #199357)
Cod sursa(job #199357)
#include<stdio.h>
#include<limits.h>
#define INF INT_MAX/2-1
#define NMAX 4000
#define MMAX 100000
struct muchie{unsigned short a,b,c;};
int c[NMAX+1][NMAX+1];
int main(){
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
int n,m,i,j,k,t,nrt,ok,nrsel,gata,min;
muchie w[MMAX];
int o[NMAX+1]={0},d[NMAX+1]={0};
unsigned short /*s[NMAX+1]={0},*/x,y,start;
scanf("%d",&t);
for(nrt=0;nrt<t;++nrt){
scanf("%d%d%hu",&n,&m,&start);
for(i=1;i<=n;++i) scanf("%d",&o[i]);
for(i=0;i<m;++i) scanf("%hu%hu%hu",&w[i].a,&w[i].b,&w[i].c);
for(i=1;i<=n;++i)
for(j=1;j<=n;++j) c[i][j]=INF;
for(i=1;i<=n;++i) c[i][i]=0;
for(i=0;i<m;++i){
x=w[i].a;y=w[i].b;
c[x][y]=c[y][x]=w[i].c;
}
for(k=1;k<=n;++k)
for(i=1;i<=n;++i)
if(i!=k)
for(j=1;j<=n;++j)
if(j!=i&&j!=k)
if(c[i][j]>c[i][k]+c[k][j])
c[i][j]=c[i][k]+c[k][j];
for(i=1;i<=n;++i){
d[i]=c[start][i];
if(d[i]==INF) d[i]=0;
}
ok=1;
for(i=1;i<=n&&ok;++i) ok=d[i]==o[i];
ok?printf("DA\n"):printf("NU\n");
}
return 0;
}